本文主要是介绍Tensorflow 训练模型数据freeze固话保存在Graph中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在tensorflow中,graph是训练的核心,当一个模型训练完成后,需要将模型保存下来,一个通常的操作是:
variables = tf.all_variables()saver = tf.train.Saver(variables)saver.save(sess, "data/data.ckpt")
tf.train.write_graph(sess.graph_def, 'graph', 'model.ph', False)
这样就可以将model保存在model.ph文件中,然而使用的时候不仅要加载模型文件model.ph,还要加载保存的data.ckpt数据文件才能使用。这样保持了数据与模型的分离,确实是个不错的方法。
当我们把一个训练模型完整的训练好上线时候,我们期待的场景是:将一张图片喂进去,然后得出结果。 这时候再这样加载或许有些不必要,特别是在一些变量”不明”的时候特别麻烦.这时候一个比较好的方法就是将变量(偏执,权重等)固化到模型数据中。
创建图
在文件开头增加如下代码
声明tensor
在需要的操作添加
固化保存
固化操作中最重要的函数是:
tf.graph_util.convert_variables_to_constants(sess, input_graph_def, output_node_names, variable_names_whitelist=None, variable_names_blacklist=None)
代码运行后控制台打印:
这样在我们使用的时候就不要再进行data.ckpt的数据恢复。直接通过:
sess.graph.get_tensor_by_name()
就可以获取一个tensor,是不是很方便。
小报错:
- assert d in name_to_node_map, “%s is not in graph” % d
AssertionError: A is not in graph
解决:仔细查看tensor名称是否正确。 NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for checkpoint.ckpt
分析:说是加载不到,但是路径和文件名没有错
解决:google找到https://github.com/tensorflow/tensorflow/issues/6082
就是加一个”./”,指定当前目录。参考文章:
http://blog.csdn.net/lujiandong1/article/details/53385092
http://blog.csdn.net/searobbers_duck/article/details/51721916
这篇关于Tensorflow 训练模型数据freeze固话保存在Graph中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!