【问题标题】:In tensorflow estimator class, what does it mean to train one step?在tensorflow估计器类中,一步训练是什么意思?
【发布时间】:2018-09-21 18:26:12
【问题描述】:

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

这里的文档: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 多个数据点。我的问题是,在这一步中,它执行了多少次梯度下降?它是只执行一次反向传播和梯度下降,还是继续执行梯度下降,直到模型权重达到这批数据的最佳值?

【问题讨论】:

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


    【解决方案1】:

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

    num_batches = num_epochs * (num_samples / batch_size)
    

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

    【讨论】:

      【解决方案2】:

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

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

      Michael Nielsen 在他的book 中有一个很好的方式来解释这个概念。

      【讨论】:

      • 嗨,非常感谢您的高质量回答!我是 stackOverflow 的新手,我真的开始喜欢这个社区了。
      • 另外,当我阅读您所附的书时,只是一个后续问题:为梯度下降设置“正确”步长非常重要,对吧?如果步长很小,那么仅将权重更新 5 次不会有太大区别。那么人们通常如何确定步长的正确范围呢?
      • 由于网络中任何变量的更新规则(Eq. 20+21)都按因子 n/m 进行缩放,其中 n 是学习率,m 是批量大小,您只需定义它是一种新的修正学习率,可以像非随机 GD 算法一样确定。
      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 谢谢!!那么人们通常如何确定步长和步数的正确范围呢?如果步长很小,那么仅仅更新权重 100 次不会有太大的不同。如果步长很大,可能不会收敛到权重的最佳值集。
      • 通过超参数搜索和手动衰减学习率、通过某种线性或非线性衰减或通过根据验证准确度计算减少的时间来尝试和错误。您通常会尽可能高地启动它,并随着训练的进行而放弃它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2020-01-22
      • 1970-01-01
      • 2018-09-15
      • 2023-04-06
      • 2017-04-29
      相关资源
      最近更新 更多