步骤对tf.estimator.Estimator的训练方法意味着什么?

时间:2019-04-10 09:21:39

标签: tensorflow

我对时代和步骤的含义完全感到困惑。我也读过问题What is the difference between steps and epochs in TensorFlow?,但是我不确定答案。考虑这段代码:

EVAL_EVERY_N_STEPS = 100
MAX_STEPS = 10000

nn = tf.estimator.Estimator(
        model_fn=model_fn,
        model_dir=args.model_path,
        params={"learning_rate": 0.001},
        config=tf.estimator.RunConfig())

for _ in range(MAX_STEPS // EVAL_EVERY_N_STEPS):
        print(_)

        nn.train(input_fn=train_input_fn,
                 hooks=[train_qinit_hook, step_cnt_hook],
                 steps=EVAL_EVERY_N_STEPS)

        if args.run_validation:
            results_val = nn.evaluate(input_fn=val_input_fn,
                                      hooks=[val_qinit_hook, 
                                      val_summary_hook],
                                      steps=EVAL_STEPS)

            print('Step = {}; val loss = {:.5f};'.format(
                results_val['global_step'],
                results_val['loss']))
end

另外,训练样本的数量为400。我认为MAX_STEPS // EVAL_EVERY_N_STEPS等于历元(或迭代)。确实,纪元数是100。这些步骤在nn.train中意味着什么?

1 个答案:

答案 0 :(得分:0)

在深度学习中:

  • 一个纪元是指整个训练集的一遍。
  • 一个步骤或一个迭代对应一个向前通过和一个向后通过。

如果未对数据集进行分割并按原样传递给算法,则每个步骤对应一个纪元,但是通常,将训练集划分为N个迷你批。然后,每一步都要经过一批,您需要N步才能完成一个完整的纪元。

在这里,如果batch_size == 4,则100步确实等于一个纪元。

epochs = batch_size * steps // n_training_samples