Tensorflow:如何使用之前训练过的估算器

时间:2018-05-31 02:18:41

标签: python tensorflow

所以我在这里查看官方张量流教程:https://www.tensorflow.org/tutorials/layers

基本上,它教你如何训练mnist数据集的分类器。

完整的代码非常简短,可以在这里找到: https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/examples/tutorials/layers/cnn_mnist.py

我可以毫无问题地运行它。但我想知道如何重复使用此文件中训练的估算器来执行其他程序。该模型保存为3个文件:一个.data-00000-of-00001文件,一个.meta文件和一个.index文件。

我用Google搜索,似乎您可以通过以下方式加载模型:

sess=tf.Session()    
saver = tf.train.import_meta_graph('my_model.meta')
saver.restore(sess,tf.train.latest_checkpoint('./'))      

但我如何从这里开始呢?看起来很奇怪教程没有教你如何重用估算器。

1 个答案:

答案 0 :(得分:0)

导入元图不会在元图中显式加载节点。 它只在内部加载节点。并且此内部节点具有您之前分配的名称,如

tf.truncated_normal([28, 128], stddev=1.0 / math.sqrt(float(28))), name="weights1")

在这种情况下,“weights1”是您的“内部”节点名称。 然后你应该将你的'内部'节点绘制(分配)为'外部'变量(代码级别)。

# bring out a "weights1" node from meta graph
fc_weights1 = tf.get_collection('weights1')

就像这样,你可以做到

logits = tf.get_collection('logits_node_before_you_named')

你可以写下你以前做过的新的精确节点。 总之,您可以使用tf.get_collection方法将要使用的节点提取到曲面(代码级别)。

P.S。使用这些“内部”,“外部”术语不是官方的,仅为方便起见。