如何正确的 freeze

在 freeze 模型的时候使用以下代码:

constant_graph = graph_util.convert_variables_to_constants (sess, sess.graph_def, ['name', 'name2', 'name3'])
with tf.gfile.FastGFile (FLAGS.model_pb_dir + 'mymodel.pb', mode='wb') as f:
    f.write (constant_graph.SerializeToString ())

这样做和官方的:

bazel build tensorflow/tools:freeze_graph
bazel-bin/tensorflow/tools/freeze_graph \
--input_graph=/tmp/model/my_graph.pb \
--input_checkpoint=/tmp/model/model.ckpt-1000 \
--output_graph=/tmp/frozen_graph.pb \
--output_node_names=output_node \

有什么区别 ??


提问人:tensorfyx,发帖时间:2018-5-2 15:31:43

我的理解是这样的。
这两个东西作的是同一件事情。第一个是代码层做转化。第二个是用命令行做转换。

看你方便用哪一个就用好了哈~


舟 3332,发表于 2018-5-2 17:13:18

这个是不是在读文件写文件?就和普通 Python 的 openfile 一样啊?


M 丶 Sulayman,发表于 2018-5-3 08:57:50

就是把变量弄成常量放到 pb 文件里面。


Renmin,发表于 2018-5-3 10:38:07

变量还可以成为常量啊…不是一直在变动么?


M 丶 Sulayman,发表于 2018-5-4 09:59:42

当模型训练结束之后里面的变量就会作为常量……然后变成模型使用


黄虎,发表于 2018-5-4 12:49:43

我的理解一个是基于工程中的方式……一个是基于 cmd 命令行的方式我一般在工程中采用第一种


黄虎,发表于 2018-5-4 12:50:44

变量在训练时会变,但是之后的预测应用中,一般会变成 static 的,因为已经由训练确定好了对应的参数值,通过 freeze,可以对模型进行优化固化,提升性能。
另外,如果希望在手机上使用训练好的模型进行预测,就需要将 pb 文件 freeze 到 tflite 格式。


slobber,发表于 2018-5-7 11:50:17

原来这样啊,解释的通俗易懂~


M 丶 Sulayman,发表于 2018-5-7 12:50:11