Ron_617 2024-04-02 15:22 采纳率: 0%
浏览 85
已结题

用tensorflow训练好的模型转onnx格式

我在尝试将tensorflow训练好的模型转换成onnx文件格式时,尝试了多种方式但是总是提醒这样的错误,怎么解决呢dtype = TF_TO_ONNX_DTYPE[dtype]
KeyError: tf.float32_ref,保存模型的方式试了多种包括.pb格式,.meta格式,基本都时模型的权重是float_ref导致的问题
例如输入python -m tf2onnx.convert --checkpoint model.ckpt-100.meta --output tfmodel.onnx --inputs Placeholder:0 --outputs Reshape:0
提示的错误包括dtype = TF_TO_ONNX_DTYPE[dtype],KeyError: tf.float32_ref。
还有Input 0 of node RDB/conv1_scale1/bn1_VI_batch_norm/AssignMovingAvg was passed float from RDB/conv1_scale1/bn1_VI_batch_norm/moving_mean:0 incompatible with expected float_ref.

  • 写回答

24条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    根据你提供的错误信息,问题出现在转换过程中的数据类型不匹配。在TensorFlow中,tf.float32_ref表示一个变量的引用,而不是实际的数据。而ONNX格式中没有类似的数据类型,因此会出现错误。

    为了解决这个问题,你可以尝试以下解决方案:

    1. 尝试将模型的权重保存为实际的浮点数数据类型:在使用tf.train.Saver保存模型时,尝试使用export_meta_graph参数设置为True,可以保存模型的图结构和权重值。这样在转换为ONNX格式时,权重将被保存为实际的浮点数值。
    2. 使用TensorFlow的图编辑工具修改模型:你可以尝试使用TensorFlow的图编辑工具修改模型,将tf.float32_ref类型的张量转换为普通的浮点数类型。你可以使用tf.get_default_graph获取默认的图,并使用tf.graph_util.convert_variables_to_constants将模型中的变量转换为常量。然后再尝试将转换后的模型保存为ONNX格式。
    3. 尝试使用其他框架(如TensorRT)进行模型转换:如果经过尝试仍然无法解决该问题,你可以尝试使用其他框架进行模型转换。比如TensorRT可以直接加载TensorFlow模型,并将其转换为ONNX格式。

    实际操作中,你可以尝试将以上解决方案逐一尝试,根据自己的情况选择最适合的方法。

    如果你有具体的代码片段,我可以帮你进行修改和优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月7日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 用大厂网站防红自己网站
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?