可视化 TFLite 图并获取特定节点的中间值?

2024-05-16

我想知道是否有办法知道 tflite 中特定节点的输入和输出列表?我知道我可以获得输入/输出详细信息,但这不允许我重建发生在Interpreter。所以我要做的是:

interpreter = tf.lite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()

input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.get_tensor_details()

最后 3 个命令基本上给了我字典,但似乎没有必要的信息。

所以我想知道是否有办法知道每个节点输出的去向?一定Interpreter不知何故知道这一点。我们可以吗?谢谢。


Note:这个答案是为 Tensorflow 1.x 编写的,虽然概念和核心思想在 TensorFlow 2.x 中保持不变,但这个答案中的命令可能已被弃用。

TF-Lite 的机制使得检查图并获取内部节点的中间值的整个过程有点棘手。这get_tensor(...)其他答案建议的方法不起作用。

如何可视化 TF-Lite 推理图?

TensorFlow Lite 模型可以使用以下方式可视化可视化.py https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/tools/visualize.py脚本中的TensorFlow Lite 存储库 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite。您只需要:

  • 克隆 TensorFlow 存储库 https://www.tensorflow.org/install/source

  • Run the visualize.py带有 bazel 的脚本:

      bazel run //tensorflow/lite/tools:visualize \
           model.tflite \
           visualized_model.html
    

我的 TF 模型中的节点在 TF-Lite 中是否具有等效节点?

NO!事实上,TF-Lite 可以修改您的图表,使其变得更加优化。以下是来自TF-Lite 文档 https://www.tensorflow.org/lite/guide/ops_compatibility:

许多 TensorFlow 操作都可以由 TensorFlow Lite 处理,尽管它们没有直接的等效项。这种情况可以简单地从图中删除(tf.identity)、用张量(tf.placeholder)替换或融合到更复杂的操作(tf.nn.bias_add)中。有时,甚至某些受支持的操作也可能会通过这些过程之一被删除。

此外,TF-Lite API目前不允许获取节点对应关系; TF-Lite 的内部格式很难解释。因此,即使没有下面的另一个问题,您也无法获得所需的任何节点的中间输出......

我可以获得某些 TF-Lite 节点的中间值吗?

NO!这里我就解释一下为什么get_tensor(...) https://www.tensorflow.org/api_docs/python/tf/lite/Interpreter#get_tensor在 TF-Lite 中不起作用。假设在内部表示中,图包含 3 个张量,以及中间的一些密集操作(节点)(您可以认为tensor1作为输入和tensor3作为模型的输出)。在这个特定图的推理过程中,TF-Liteonly需要 2 个缓冲区,让我们展示一下如何操作。

First, use tensor1计算tensor2通过应用dense手术。这只需要 2 个缓冲区来存储值:

           dense              dense
[tensor1] -------> [tensor2] -------> [tensor3]
 ^^^^^^^            ^^^^^^^
 bufferA            bufferB

Second,使用的值tensor2存储在bufferB计算tensor3... 可是等等!我们不需要bufferA不再了,所以让我们用它来存储值tensor3:

           dense              dense
[tensor1] -------> [tensor2] -------> [tensor3]
                    ^^^^^^^            ^^^^^^^
                    bufferB            bufferA

现在是棘手的部分。 “产值”为tensor1仍会指向bufferA,现在的值是tensor3。所以如果你打电话get_tensor(...) https://www.tensorflow.org/api_docs/python/tf/lite/Interpreter#get_tensor对于第一个张量,您将得到不正确的值。这该方法的文档 https://www.tensorflow.org/api_docs/python/tf/lite/Interpreter#get_tensor甚至指出:

该函数不能用于读取中间结果。

如何解决这个问题?

  • 简单但有限的方法。您可以指定节点的名称,以及要在转换期间获取其值的输出张量:

      tflite_convert \
          -- # other options of your model
          --output_arrays="output_node,intermediate/node/n1,intermediate/node/n2"
    
  • 困难但灵活的方式。您可以使用 Bazel 编译 TF-Lite(使用这条指令 https://www.tensorflow.org/install/source)。然后你实际上可以注入一些日志代码Interpreter::Invoke()在文件中tensorflow/lite/interpreter.cc。一个丑陋的黑客,但它有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可视化 TFLite 图并获取特定节点的中间值? 的相关文章

  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 在 Sphinx 中,有没有办法在声明参数的同时记录参数?

    我更喜欢在声明参数的同一行记录每个参数 根据需要 以便应用D R Y http en wikipedia org wiki Don t repeat yourself 如果我有这样的代码 def foo flab nickers a ser
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X

随机推荐

  • 如何使用 SSIS 将多个 Access 数据库导入到 SQL Server

    我有一个文件夹 其中包含 300 多个 Access 数据库 由我无法控制的程序编写 它们都有相同的结构 只是一张表 我正在将数据导入到 SQL Server 2005 中的表中 使用导入向导效果很好 但它一次只能用于一个 Access 数
  • 最简单的 Ajax 照片库

    我不认为 最简单 是主观的 寻找一个可托管的照片库 除了显示图像并提供 下一张图像 和 上一张图像 之外什么也不做 但所有这些都无需重新加载页面 显然预缓存也很好 PHP Python Ruby 或 JS 如果你想要简单的 也许是这样的 d
  • RecyclerView 未显示列表中的所有项目

    我在用RecyclerView在我的应用程序中 每次我打开屏幕时 我只能看到一项 但当我调试时 它每次都会出现onBindViewHolder method 这是我的适配器 Override public ViewHolder onCrea
  • PHP语言问题

    我有一个 php 页面 它将邮件发送到特定电子邮件 其中包含此页面表单中的数据 邮件必须以网站的母语 阿拉伯语 发送 但是当我单击表单上的提交按钮时 收到的邮件一半可读 阿拉伯语 另一部分不可读 符号 我想知道如何解决这个问题并且能够发送邮
  • JSP:未评估 EL 表达式[重复]

    这个问题在这里已经有答案了 我有一个在 Tomcat 5 5 上运行的 JSP 页面 我有以下代码
  • BufferedInputStream 的使用

    让我在这篇文章的序言中提出一点警告 对于 Java 来说 我完全是个初学者 我断断续续地编写 PHP 有一段时间了 但我准备制作一个桌面应用程序 因此出于各种原因我决定使用 Java 我正在开发的应用程序处于开始阶段 少于 5 个类 我需要
  • JPA 和 PostqreSQL:长字符串持久化

    谁能告诉我如何使用 JPA 保存长文本 我使用 PostgreSQL 这是我在类中定义很长字符串的方法 Lob private String body 然而 这会产生一个类型的字段字符变化 255 在数据库中 此外 我尝试使用 Column
  • Airflow 默认连接数过多

    我打开气流并检查连接 发现其后面运行的连接太多 关于如何杀死那些我不使用的任何想法 或者我很想知道运行它的最小 conn id 建筑学 LocalExecutor 与其他经纪人不同 Postgres 作为元数据库 但它列出了 17 个连接
  • POD 结构或标准布局类型的成员是否保证根据其对齐要求进行对齐?

    给定一个 POD 结构 在 C 03 中 或一个标准布局类型 在 C 11 中 所有成员都有基本对齐要求 是否可以保证每个成员都根据其对齐要求进行对齐 换句话说 对于所有成员m k in m0 mn标准布局类型的 S struct S T0
  • 鼠标监听器帮助 Java

    我正在尝试用 Java Swing 编写一个程序 输出一个 10 x 10 的几何矩形网格 其中填充了随机颜色 但是 当用户单击显示窗口中的一个矩形时 该矩形应重新绘制 并更改为另一种颜色 到目前为止 我已经运行了基本程序 但我不知道如何对
  • 生产中偶尔会发生 android.webkit.WebView 类膨胀错误

    我的应用程序在 Google Play 上 它在大多数设备 数千个用户 上运行良好 但在极少数情况下 占每日活跃用户百分比的一小部分 我得到Error inflating class android webkit WebView当我为我的片
  • 从 Java 执行 .app 文件夹?

    有没有一种合理的方法可以直接从 Java 执行 app 目录 而不是深入查找二进制文件 我有一个带有一些首选项的应用程序 其中包括用于打开各种内容的外部程序 如果在 OSX 上用户可以只选择 app 文件夹 那就太好了 我可以查找 app
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • IntelliJ - 从测试覆盖率报告中排除某些类(包)

    我目前正在使用 Java 和 Play 框架 我有 JUnit 测试 并且正在尝试使用 IntelliJ 覆盖率运行器来测量覆盖率 不幸的是 Play 生成了一些垃圾类 IntelliJ 将它们包含在报告中 有没有办法排除覆盖率报告中的某些
  • 大 O 和等号,滥用符号

    维基百科说 http en wikipedia org wiki Big O notation Matters of notation 上面定义的语句 f x is O g x 通常写为 f x O g x 有些人认为这是对符号的滥用 因为
  • PHP:在多维数组中查找相同的键并合并结果

    我有一个多维数组 如下所示 array 0 gt array WS gt array id gt 2 name gt hello 1 gt array SS gt array id gt 1 name gt hello2 2 gt arra
  • 页面上首次调用 Url.Action 速度很慢

    我有一个相当简单的 ASP MVC 视图的性能问题 这是一个登录页面 应该几乎是即时的 但需要大约半秒钟 经过大量挖掘后 问题似乎出在第一个调用上Url Action 大约需要 450 毫秒 根据迷你分析器 http miniprofile
  • 我应该如何审核 MySQL 表中的更改(使用 MySQL 4)?

    我被要求审核 MySQL 表中的任何 所有更改 有谁知道有什么工具可以帮助我做到这一点 还是我需要编写自己的解决方案 如果我编写自己的审计 我最初的想法是制作一个单独的表并在 PHP 代码中构建一系列更改 类似 fieldname1 gt
  • 两个 RichTextBox 具有相同的滚动条

    是否有任何可用的第三方工具有两个富文本框 但两者只有一个共享滚动条 我需要用两种不同的语言实现一些文本 但两个文本框应该同时滚动 public enum ScrollBarType uint SbHorz 0 SbVert 1 SbCtl
  • 可视化 TFLite 图并获取特定节点的中间值?

    我想知道是否有办法知道 tflite 中特定节点的输入和输出列表 我知道我可以获得输入 输出详细信息 但这不允许我重建发生在Interpreter 所以我要做的是 interpreter tf lite Interpreter model