在tensorflow估算器类中,训练一步是什么意思?

时间:2018-04-11 18:42:32

标签: tensorflow back backpropagation gradient-descent tensorflow-estimator

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

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

e.g。

  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许多数据点为神经网络模型提供一次。我的问题是,在这一步中,它执行了多少次梯度下降?它只进行一次反向传播和梯度下降,还是继续执行梯度下降,直到模型权重达到这批数据的最佳值?

3 个答案:

答案 0 :(得分:3)

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

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

迈克尔·尼尔森在他的book中有一个非常好的方式来解释这个概念。

答案 1 :(得分:2)

1步= 1渐变更新。每个渐变更新步骤都需要一个前向传递和一个后向传递。

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

这是一篇关于停止条件的好文章,谷歌搜索将会出现更多。

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

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

答案 2 :(得分:0)

输入函数发出批处理(num_epochs=None时,num_batches是无限的):

num_batches = num_epochs * (num_samples / batch_size)

第一步是处理1批,如果steps > num_batches,则在num_batches后停止训练。