Tensorflow示例似乎已断开,函数根据模式返回不同的图形。这怎么办?

时间:2017-11-27 08:53:06

标签: tensorflow

阅读tensorflow教程,特别是https://www.tensorflow.org/tutorials/layers,有一个功能可以起到以下作用:

def some_model(mode):
    # some stuff here
    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)
    # some other stuff here

    if mode == tf.estimator.ModeKeys.TRAIN:
        optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
        train_op = optimizer.minimize(
            loss=loss,
            global_step=tf.train.get_global_step())
        return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
 # return something else dependent on condition

以上对我来说没有意义,如果你用模式设置为预测来构建模型,是不是从头开始初始化权重/一些初始化器意味着这一步的结果纯粹是任意的? 如果是这样的话为什么呢? 当然你应该返回一个适合训练的模型,可以预测和训练吗?

我错过了什么?

1 个答案:

答案 0 :(得分:1)

模型功能仅提供根据所需的特定用途量身定制的图表(即您传递的mode)。

这个功能背后的想法是你只插入特定模式所需的图形:

  • 预测:您只需要您的模型(从输入到predictions输出)。
  • 评估:除了预测提供的内容之外,还需要某种准确度量来评估。
  • 培训:除了预测提供的内容之外,您还需要计算损失,附加优化程序并进行列车操作。

在所有这些中,您实际学习的图形部分(即网络的权重)始终是相同的,因为它始终包含在输入和输出张量之间。该图表部分中的变量从检查点文件加载(如果可用),否则重新初始化。

附加到图表的其他节点是不同操作模式之间的实际变化,但在特定阶段之外不需要这些节点(例如,一旦完成训练,就可以处理损失计算,优化器和周围所需的所有样板。)