【发布时间】:2019-05-07 10:49:14
【问题描述】:
我正在使用带有 AdamOptimizer 的 tensorflow 自定义估计器,所以我的 model_fn 看起来像这样:
def model_fn(features, labels, mode, params):
...
loss = ...
train_op = tf.train.AdamOptimizer(params['learning_rate']).minimize(loss, tf.train.get_global_step())
if mode == tf.estimator.ModeKeys.TRAIN:
return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)
elif mode == tf.estimator.ModeKeys.EVAL:
return tf.estimator.EstimatorSpec(mode, loss=loss)
elif mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode, predictions=predictions)
我想实现一个提前停止机制。为简化起见,我正在执行以下操作:
for epoch in range(1000):
model.train(input_fn=input_fn, steps=self.steps_by_epoch)
loss = model.evaluate(input_fn=eval_input_fn)['loss']
if loss < 0.001:
break
所以model.train 将被循环调用,并在每次调用时执行一个纪元数据。
我的问题是:AdamOptimizer(和许多其他优化器)中的学习率是一个状态变量,应该在最小化过程中演变。它的值会在两次调用 model.train 之间保存,还是会在每次调用时重新初始化?
如果是后者,我怎样才能让 Tensorflow 记住两次调用 model.train 之间的变量
【问题讨论】:
标签: tensorflow tensorflow-estimator