【问题标题】:Tensorflow: how to use an estimator trained earlierTensorflow:如何使用早期训练的估计器
【发布时间】:2018-05-31 12:30:57
【问题描述】:

所以我在这里看官方的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 文件。

我用谷歌搜索了,看来您可以通过以下方式加载模型:

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

但是我该如何从这里开始呢?教程没有教你如何重用估算器,这似乎很奇怪。

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    导入元图不会在元图中显式加载您的节点。 它仅在“内部”加载节点。并且这个内部节点有你之前分配的名称,比如

    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方法将你想要使用的节点拉到表面(代码级别)。

    附:使用这些“内部”、“外部”术语不是官方的,只是为了方便。

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2019-05-07
      • 2019-04-13
      • 2018-09-12
      • 2017-07-16
      相关资源
      最近更新 更多