在Tensorflow 2中导出冻结的图.pb文件

时间:2019-03-22 12:49:02

标签: tensorflow tensorflow2.0

我一直在尝试Tensorflow 2 alpha,我一直在尝试冻结模型并将其导出到.pb graphdef文件。

在Tensorflow 1中,我可以做这样的事情:

# Freeze the graph.
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
    sess,
    sess.graph_def,
    output_node_names)

# Save the frozen graph to .pb file.
with open('model.pb', 'wb') as f:
    f.write(frozen_graph_def.SerializeToString())

但是,由于convert_variables_to_constants被删除并且不鼓励使用会话,因此这似乎不再可行。

我看了看,发现有冻结图工具 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py适用于SavedModel导出。

是否仍可以在Python中完成某些操作,或者我现在打算切换并使用此工具?

2 个答案:

答案 0 :(得分:1)

从tensorflow1.x迁移到tensoflow2.0 beta时,我也遇到了同样的问题。 此问题可以通过两种方法解决:

  1. 第一个是去tensflow2.0 docs搜索您使用的方法并更改每行的语法&
  2. 使用Google的tf_ugrade_v2脚本

tf_upgrade_v2-输入文件your_tf1_script_file-输出文件已转换_tf2_file

您尝试使用上述命令将tensorflow1.x脚本更改为tensorflow2.0,它将解决所有问题。

此外,您可以重命名方法(通过参考文档进行手动操作) 将'tf.graph_util.convert_variables_to_constants'重命名为'tf.compat.v1.graph_util.convert_variables_to_constants'

度量问题是tensorflow2.0中的许多语法和功能已更改,请尝试参考tensoflow2.0文档或使用Google的tf_upgrade_v2脚本

答案 1 :(得分:1)

不知道您是否已经看到过Tensorflow 2.0问题,但是此响应似乎是一种解决方法:

https://github.com/tensorflow/tensorflow/issues/29253#issuecomment-530782763

注意:这不适用于我的nlp模型,但也许对您有用。建议的解决方法是在TF 2.0环境中使用@Autowire。然后使用TF 1.14创建新环境,并在TF 1.14 env中执行以下所有步骤。建立模型model.save_weights('weights.h5'),然后使用model = create_model()将权重重新加载到模型中。然后使用model.load_weights('weights.h5')保存整个模型。如果您成功完成了上述步骤,请按照链接中的其余步骤操作以使用Frozen_graph。