【问题标题】:tensorflow estimator many calls to train with adamtensorflow 估计器多次调用与亚当一起训练
【发布时间】: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


    【解决方案1】:

    每次调用model.train() 后,模型状态将保存在检查点中。 由于 Adam 优化器中使用的所有参数也是 tensorflow 图的变量,因此它们也将保存在检查点中,因此将在下次调用 model.train() 时检索它们。

    您还应该查看tf.estimator.train_and_evaluate (https://www.tensorflow.org/api_docs/python/tf/estimator/train_and_evaluate)。

    每当保存检查点时,这将自动进行评估。您可以使用规范控制检查点和评估频率。

    【讨论】:

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