我使用tensorflow工具编写了神经网络。 一切正常,现在我想导出我的神经网络的最终权重,以制作一个单一的预测方法。 我怎么能这样做?
答案 0 :(得分:3)
您需要在培训结束时使用tf.train.Saver
课程保存模型。
在初始化Saver
对象时,您需要传递要保存的所有变量的列表。最好的部分是你可以在不同的计算图中使用这些保存的变量!
使用
创建Saver
对象
# Assume you want to save 2 variables `v1` and `v2`
saver = tf.train.Saver([v1, v2])
使用tf.Session
对象
saver.save(sess, 'filename');
当然,您可以添加其他详细信息,例如global_step
。
您可以使用restore()
功能在以后恢复变量。恢复的变量将自动初始化为这些值。
答案 1 :(得分:1)
上面的答案是保存/恢复会话快照的标准方法。但是,如果要将网络导出为单个二进制文件以便与其他tensorflow工具一起使用,则需要执行更多步骤。
首先,freeze the graph。 TF提供了相应的工具。我这样用它:
#!/bin/bash -x
# The script combines graph definition and trained weights into
# a single binary protobuf with constant holders for the weights.
# The resulting graph is suitable for the processing with other tools.
TF_HOME=~/tensorflow/
if [ $# -lt 4 ]; then
echo "Usage: $0 graph_def snapshot output_nodes output.pb"
exit 0
fi
proto=$1
snapshot=$2
out_nodes=$3
out=$4
$TF_HOME/bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=$proto \
--input_checkpoint=$snapshot \
--output_graph=$out \
--output_node_names=$out_nodes
完成后,您可以optimize it for inference或使用any other tool。