TensorFlow Lite 无法识别操作 VarHandleOp

2024-01-01

我正在尝试将 TF 模型转换为 TFLite。模型保存在.pb格式,我已使用以下代码对其进行了转换:

import os
import tensorflow as tf
from tensorflow.core.protobuf import meta_graph_pb2

export_dir = os.path.join('export_dir', '0')
if not os.path.exists('export_dir'):
    os.mkdir('export_dir')

tf.compat.v1.enable_control_flow_v2()
tf.compat.v1.enable_v2_tensorshape()

# I took this function from a tutorial on the TF website
def wrap_frozen_graph(graph_def, inputs, outputs):
    def _imports_graph_def():
        tf.compat.v1.import_graph_def(graph_def, name="")
    wrapped_import = tf.compat.v1.wrap_function(_imports_graph_def, [])
    import_graph = wrapped_import.graph
    return wrapped_import.prune(
            inputs, outputs)

graph_def = tf.compat.v1.GraphDef()
loaded = graph_def.ParseFromString(open(os.path.join(export_dir, 'saved_model.pb'),'rb').read())

concrete_func = wrap_frozen_graph(
        graph_def, inputs=['extern_data/placeholders/data/data:0', 'extern_data/placeholders/data/data_dim0_size:0'],
    outputs=['output/output_batch_major:0'])
concrete_func.inputs[0].set_shape([None, 50])
concrete_func.inputs[1].set_shape([None])
concrete_func.outputs[0].set_shape([None, 100])

converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter.experimental_new_converter = True
converter.post_training_quantize=True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                                               tf.lite.OpsSet.SELECT_TF_OPS]
converter.allow_custom_ops=True

tflite_model = converter.convert()

# Save the model.
if not os.path.exists('tflite'):
    os.mkdir('tflite')
output_model = os.path.join('tflite', 'model.tflite')
with open(output_model, 'wb') as f:
     f.write(tflite_model)

但是,当我尝试将 intepretere 与该模型一起使用时,出现以下错误:

INFO: TfLiteFlexDelegate delegate: 8 nodes delegated out of 970 nodes with 3 partitions.

INFO: TfLiteFlexDelegate delegate: 0 nodes delegated out of 4 nodes with 0 partitions.

INFO: TfLiteFlexDelegate delegate: 3 nodes delegated out of 946 nodes with 1 partitions.

INFO: TfLiteFlexDelegate delegate: 0 nodes delegated out of 1 nodes with 0 partitions.

INFO: TfLiteFlexDelegate delegate: 3 nodes delegated out of 16 nodes with 2 partitions.

Traceback (most recent call last):
  File "/path/to/tflite_interpreter.py", line 9, in <module>
    interpreter.allocate_tensors()
  File "/path/to/lib/python3.6/site-packages/tensorflow/lite/python/interpreter.py", line 243, in allocate_tensors
    return self._interpreter.AllocateTensors()
RuntimeError: Encountered unresolved custom op: VarHandleOp.Node number 0 (VarHandleOp) failed to prepare.

现在,我找不到任何VarHandleOp在代码中我发现它实际上是在tensorflow中(https://www.tensorflow.org/api_docs/python/tf/raw_ops/VarHandleOp https://www.tensorflow.org/api_docs/python/tf/raw_ops/VarHandleOp)。 那么,为什么TFLite无法识别呢?


正如 SO 指南所建议的那样,在模型转换的情况下提供最小的可重现示例当然很困难,但这些问题将受益于更好的指针。例如,与其说“我从 TF 网站上的教程中获取了这个函数”,不如提供教程的链接是一个更好的主意。 TF 网站非常庞大。

您所指的教程可能来自关于从 TF1 迁移到 TF2 的部分 https://www.tensorflow.org/guide/migrate#a_graphpb_or_graphpbtxt,特别是处理原始图形文件的部分。最重要的一点是

如果你有一个“冻结图”(atf.Graph 其中变量已转换为常量)

(粗体突出部分是我的)。显然,你的图表包含VarHandleOp(这同样适用于Variable and VariableV2节点),并且根据此定义不被“冻结”。您的一般方法是有意义的,但是您需要一个图表,其中包含以下形式的变量的实际训练值Const https://www.tensorflow.org/api_docs/python/tf/raw_ops/Const节点。您在训练时需要变量,但在推理时需要变量,并且应该将其烘焙到图中。 TFLite 作为推理时间框架,不支持变量。

你的其余想法似乎不错。TFLiteConverter.from_concrete_functions目前正好需要一个concrete_function,但这就是您通过包装图表得到的结果。如果运气足够好,它可能会起作用。

有一个实用程序tensorflow/python/tools/freeze_graph.py https://github.com/tensorflow/tensorflow/blob/v2.3.1/tensorflow/python/tools/freeze_graph.py尽力用从最新检查点文件中获取的常量替换 Graph.pb 中的变量。如果您查看其代码,可以使用保存的元图(检查点名称.meta)文件或将工具指向训练目录可以消除很多猜测;另外,我认为提供模型目录是获得单个冻结图和分片模型的唯一方法。


我注意到你只使用input代替tf.nest.map_structure(import_graph.as_graph_element, inputs)在示例中。你可能还有其他原因,但如果你这样做是因为as_graph_element抱怨数据类型/形状,这可能通过正确冻结图表来解决。从冻结图中获得的具体函数将对其输入形状和数据类型有一个很好的了解。一般来说,需要手动设置它们是出乎意料的,而且你这样做的事实对我来说似乎很奇怪(但我并不声称对 TF 的这个黑暗角落有广泛的经验)。

map_structure有一个关键字参数来跳过检查。

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

TensorFlow Lite 无法识别操作 VarHandleOp 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 如何解释tf.map_fn的结果?

    看代码 import tensorflow as tf import numpy as np elems tf ones 1 2 3 dtype tf int64 alternates tf map fn lambda x x x x el
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • UWP 中的扩展执行

    我想为我的 UWP 应用程序使用后台任务 下面的代码是我在Windows Mobile中的后退按钮单击事件 private async void MainPage BackRequested object sender BackReques
  • 我如何使用 SVN 作为 Maven 存储库

    我正在开发具有多个依赖项的项目 大多数依赖项都可以在我们的集中 Maven 存储库中找到 我的项目包含一些仅特定于我的应用程序且在我们的 Maven 存储库中不可用的 JAR 由于某些政策 限制 我无法将该 jar 部署到我们的 Maven
  • 匹配 XPath 中的不间断空格值

    假设我有这样的 XML 结构 table tr td nbsp td tr table 我将如何指定与谓词中的节点值的比较 tr td 应该指定什么而不是 解决办法是 tr td u0160 实际的 unicode 表示方式取决于您使用的工
  • 在angularjs中为多个部分视图创建单个html视图

    我希望创建一个包含多个标签的 html 文件 这些应该作为单独的单独视图 通常保存在部分文件夹中 然后我希望在路由控制器中指定它们 现在我正在做如下 应用程序 js angular module productapp config rout
  • 如何完成这个 Google Calendar Api v3 - FreeBusy PHP - 示例?

    我想使用 google api v3 freebusy php 来查找我的三个日历的免费 freebusy 信息 但我找不到代码的正确结尾 我想访问 freebusy response 的 日历 忙 值 由于 api 参考中没有示例代码 而
  • 使用 roxygen2 时如何指定加载 S4 方法的顺序

    我已经多次遇到以下问题 假设你有两节课 classA and classB在以下文件中描述classA R the class classA This is a class A blabla section Slots describe i
  • 如何根据指针变量计算数组的大小?

    我有数组指针 内存中的数组 我可以根据数组的指针计算数组的大小吗 我实际上不知道数组在内存中的位置 我只得到指针地址 假设9001 使用该地址我必须计算数组大小 Thanks 不 您无法计算数组的大小 C 中的对象不携带类型信息 因此您必须
  • window.scrollTo 在手机中不起作用

    在我的网页的移动视图上 我可以垂直和水平方向滚动 但这始终从左上角开始 现在我想使用 window scrollTo 或类似的东西将视口设置为我的自定义位置 window scroll 似乎只适用于桌面浏览器 知道我该如何解决这个问题吗 我
  • ESLint 和 Prettier 冲突,无法为代码块禁用 Prettier

    我们的项目使用 Prettier 和 ESLint 通常它们可以很好地协同工作 但我们遇到了两者发生冲突的问题 我不知道为什么 我不知道如何修复它 并且我无法禁用该行的 prettier 因为我收到错误 我们设置的相关部分 prettier
  • Lambda 和 std::function

    我正在努力赶上 C 11 和所有出色的新功能 我有点被 lambda 困住了 这是我能够开始工作的代码 include
  • 用 javascript 替换输入

    大家好 我正在尝试将 text 输入类型替换为 password 它适用于以下代码 function replaceT obj var newO document createElement input newO setAttribute
  • 了解 C 中的函数和指针

    这是一个很简单的问题 但是下面的函数原型是什么意思呢 int square int y size t x size t 的剂量是什么意思 我知道 size t 是一种数据类型 int gt 0 但是我如何阅读它所附的 呢 它是指向 x 的内
  • R:计算指定时间范围内不同类别的数量

    这是一些虚拟数据 user id date category 27 2016 01 01 apple 27 2016 01 03 apple 27 2016 01 05 pear 27 2016 01 07 plum 27 2016 01
  • 为什么我们必须手动刷新()扩展 PersistenceContext 中的 EntityManager?

    在我们的 J2EE 应用程序中 我们使用 EJB 3 有状态 bean 来允许前端代码创建 修改和保存持久实体 通过 JPA 2 管理 它看起来像这样 LocalBean Stateful TransactionAttribute Tran
  • 为什么我的控制台应用程序在使用 Process.Start() 启动时没有图标?

    我有一个应用程序 可以将 exe 下载到临时文件夹并使用以下命令运行它System Diagnostics Process班级 到目前为止 我已经用它运行了两个不同的应用程序 一个是控制台应用程序 另一个是完整的 Windows 应用程序
  • Ninject 和信任级别中等

    我正在尝试使用 hostgator 托管我的 asp net mvc 4 Web 应用程序 目前的问题是 我使用的计划仅允许中等信任级别 我的应用程序当前安装了 Ninject MVC 包 我尝试过使用 Ninject 主页上的 NET F
  • 合并减少 JDBC 读取并行度

    我杠杆Spark s JDBC能力如下 Read MySQL表成DataFrame 转换 them Coalesce them 将它们写给HDFS 在整个生命周期中DataFrame no action执行在上面 它曾经按预期工作 但最近我
  • 具有特定颜色和图例位置的熊猫条形图?

    我有一只熊猫DataFrame我想绘制一个包含图例的条形图 import pylab as pl from pandas import x DataFrame Alpha Series 1 1 2 3 3 2 5 Beta Series 1
  • java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ActionBar.setNavigationMode(int)”

    我在运行时收到此错误 java lang NullPointerException Attempt to invoke virtual method void android support v7 app ActionBar setNavi
  • TensorFlow Lite 无法识别操作 VarHandleOp

    我正在尝试将 TF 模型转换为 TFLite 模型保存在 pb格式 我已使用以下代码对其进行了转换 import os import tensorflow as tf from tensorflow core protobuf import