在 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