在tensorflow estimator class中,训练一步是什么意思?

In tensorflow estimator class, what does it mean to train one step?

具体一步之内,它是如何训练模型的?梯度下降和反向传播的退出条件是什么?

文档在这里:https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#train

例如

  mnist_classifier = tf.estimator.Estimator(model_fn=cnn_model_fn)

  train_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": X_train},
      y=y_train,
      batch_size=50,
      num_epochs=None,
      shuffle=True)

  mnist_classifier.train(
      input_fn=train_input_fn,
      steps=100,
      hooks=[logging_hook])

我理解,一步训练意味着我们一次性为神经网络模型提供 batch_size 个数据点。我的问题是,在这一步中,它执行了多少次梯度下降?它是只进行一次反向传播和梯度下降,还是一直进行梯度下降,直到模型权重达到这批数据的最优值?

1 步 = 1 次梯度更新。并且每个梯度更新步骤需要一次前向传播和一次反向传播。

停止条件通常由您决定,可以说是艺术多于科学。通常,您会绘制(张量板在这里很方便)您的成本、训练准确性和定期验证集准确性。验证准确性的低点通常是一个很好的停止点。根据您的数据集,验证准确性可能会下降并在某个时候再次增加,或者它可能只是变平,此时停止条件通常与开发人员的不耐烦程度相关。

这是一篇关于停止条件的好文章,google 搜索会发现更多。

https://stats.stackexchange.com/questions/231061/how-to-use-early-stopping-properly-for-training-deep-neural-network

另一种常见的停止方法是,每当您计算出某些 "reasonable" 步数的验证准确性没有发生变化时,就降低学习率。当你有效地达到 0 学习率时,你称之为退出。

除了@David Parks 的回答之外,使用批次执行梯度下降也称为随机梯度下降。您不是在每个训练样本之后更新权重,而是对批次的梯度总和进行平均,并使用这个新梯度来更新您的权重。

例如,如果您有 1000 个训练样本并使用 200 个批次,您可以计算 200 个样本的平均梯度,并用它更新您的权重。这意味着您总共只执行 5 次更新,而不是更新您的权重 1000 次。在足够大的数据集上,您将体验到更快的训练过程。

Michael Nielsen 在他的 book 中用一种非常好的方式来解释这个概念。

输入函数发出批次(当num_epochs=None、num_batches为无限时):

num_batches = num_epochs * (num_samples / batch_size)

一步是处理1个batch,如果steps > num_batches,训练会在num_batches后停止。