【问题标题】:Will excessive steps during training mess up the training process in Machine Learning?训练过程中过多的步骤是否会扰乱机器学习中的训练过程?
【发布时间】:2018-11-04 05:41:14
【问题描述】:

我有一个包含 3372149 行的数据集,我每 3751 行对它们进行批处理,如下所示:

  train_input_fn = tf.estimator.inputs.numpy_input_fn(
  x={"x": train_features_numpy},
  y=train_labels_numpy,
  batch_size = 3751,
  num_epochs= 1,
  shuffle=False)

  # Train
  nn.train(input_fn=train_input_fn)#, steps=10000)

如果我在代码中设置了 num_epochs = 1,这意味着训练过程将遍历数据集一次,对吗?这导致总步数等于 3372149/3751 = 899。

如果我取消注释“steps = 10000”部分,并设置“num_epochs=none”,则训练部分将被强制训练到第 10000 步。

那么我有两个问题:

  1. 由于我只有899组有效数据但是我设置步长为10000,那么步899之后的Tensorflow训练是什么?它只是回到顶部并重复训练吗?
  2. 如果我训练的步数超过 899 步,是否会弄乱关联特征和标签的模型?还是因为训练循环一遍又一遍地遍历相同的数据集,所以它是多余的?

我确实在其他帖子中询问过训练期间损失没有减少的问题,我现在正在考虑是否我的数据集太少无法训练,因此所有多余的步骤都是无用的。

【问题讨论】:

  • 用相同的数据重新训练可以达到什么效果——除了过度拟合?
  • 我不确定是否有比数据集更多的步骤进行重新训练。如果是这样,我们不想浪费时间一次又一次地做同样的事情,对吧?除非这里有一些有益的部分,这就是我问的原因。

标签: python tensorflow machine-learning neural-network deep-learning


【解决方案1】:

多次迭代数据集是非常普遍和正常的。模型的每个“步骤”(即每个批次)都需要一个梯度更新步骤。直观地说,它朝着那个小批量所指示的方向迈出了一步。它不会通过查看一次特定样本来了解它所能了解的所有信息,它只是离目标更近了一步,而学习率(和其他更复杂的因素)决定了一步的大小。如果您将学习率降低一半,则需要两倍的步骤才能到达那里。请注意,这与时期无关,只是“更新步骤”(又名批次)。

了解何时停止的典型方法是在训练模型时随时间绘制测试数据的准确性。您的模型肯定有可能在某个时候开始过度拟合。如果这样做,测试准确性将开始变差,这显然是一个最佳停止点。

还要注意批次数据不是连续的,每批次都是通过排列数据随机选择的。下一次通过数据集将得到不同批次的数据,因此这些批次中的每一个都会产生不同的梯度更新。因此,即使两次遍历数据集也不会在每个 epoch 上产生相同的更新集。

我实际上并不知道问题 #1 的答案,因为我不经常使用估算器 API,但我 90% 确信它只是对样本进行置换,并在每个 epoch 之后再次遍历它们。这是最常见的方法。

【讨论】:

  • "还要注意批次数据不是连续的,每批次都是通过排列数据随机选择的。"这是指洗牌吗?就我而言,可以对批次进行洗牌,但我不想对批次内的数据进行洗牌。
  • 我的意思是改组,是的,在大多数实现中每个时代都会发生这种情况,我认为在估计器 API 中也是如此。我不确定我是否理解您不想在批次中随机播放的意思。除非这是一个 RNN(在这种情况下,时间步不会被打乱),否则您的数据将被视为 IID,并且每个批次将被随机排列。我想你可以禁用它,但如果你想这样做,你应该真正理解为什么要这样做,因为它会非常不正常。
  • 由于我有意使我的数据每 3751 行有意义,我希望流程每次都包含 3751 行。这就是为什么我将batch_size设置为3751。它会随机选择我的3751行数据作为一个批次吗?还是按订单取数据?
  • 这是什么型号?如果它不是 RNN、RL 或其他时间序列模型,则该模型很可能假设 IID,并且在这些假设下表现不佳。如果您的数据是连续的,您可能应该查看 RNN,在这种情况下,您将对数据集进行建模,使得一个样本是 3751 个“时间步长”。批次没有序列,批次的每个样本都是独立计算的,最后只是对梯度进行平均。
  • 你介意看看我的另一篇文章吗:link 我在这篇文章中更具体地解释了我想要做的事情。谢谢
猜你喜欢
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2019-05-16
  • 2021-01-14
相关资源
最近更新 更多