tensorflow ckpt转pb,修改pb里面的节点信息,pb转tvm里的一些坑

本文介绍了将TensorFlow的ckpt模型转换为pb文件时的注意事项,包括不同方法打印节点名称的差异。在pb转TVM过程中,强调了保持节点属性完整以避免resize操作报错的问题,并提供了修改pb文件中节点信息的方法。同时,列举了在TVM转换过程中遇到的布局、转换格式和输入名称一致性等挑战及其解决方案。
摘要由CSDN通过智能技术生成

之前写过一篇文章有关tensorflow ckpt和pb模型之间转换的操作, 这次再详细说下里面的一些坑.

ckpt 转 pb

如果只有ckpt文件,例如三个ckpt文件model-xxx.data, model-xxx.meta, model-xxx.index, 转成pb文件方式很简单,按照上面的链接就可以,只需要确定好输出节点名称就可以。如果不知道,可以打印ckpt里面的节点名称,或者使用tf.summary.FileWriter保存模型用tensorboard去查看。

我在转一个模型的时候,发现打印ckpt里面的节点名称,有两种方法:

# read node name way 1
import tensorflow as tf
with tf.Session() as sess:
    saver = tf.train.import_meta_graph(ckpt + '.meta', clear_devices=True)
    graph_def = tf.get_default_graph().as_graph_def(add_shapes=True)
    node_list=[n.name for n in graph_def.node]
    for node in node_list:
        print (node)

#read node name way 2
#the two ways result different
from tensorflow.python import pywrap_tensorflow
reader = pywrap_tensorflow.NewCheckpointReader(ckpt)
var_to_shape_map = reader.get_variable_to_shape_map()
for key in var_to_shape_map:
    print("tensor_name: ", key)

但是这两种方法打印出来的节点名称不一样,按照经验来说,这两种方式应该打印的一样,我也没有找到原因在哪。还有一个方法是直接使用graph.get_operations(),结果和第一种一致。

pb转tvm

因为生成pb后需要转成tvm,如果模型里面有resize layer,那么在转成pb的时候,需要加入add_shapes=True选项,不然的话转出来的pb里面,所有的node信息都不包含_output_shapes属性。没有这个属性对于卷积层和BN层没有影响,但会影响tvm的转换,按照现在的tvm版本&#

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值