培训期间过多的步骤会破坏机器学习中的培训过程吗?

时间:2018-05-24 21:57:19

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

我有一个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步,是否会破坏与功能和标签相关的模型?或者它是多余的,因为训练循环只是遍布同一个数据集?
  3. 我确实在其他帖子中询问过培训期间没有减少的损失,我现在正在考虑是否有太少的数据集可以进行培训,因此所有过多的步骤都没用。

1 个答案:

答案 0 :(得分:2)

多次迭代数据集非常常见且正常。模型的每个“步骤”(即每个批次)都需要一个渐变更新步骤。从直观的角度来说,它朝着该迷你批次所指示的方向迈出了一步。通过一次看到它,它不会学习关于特定样本的所有内容,它只需更接近目标,以及学习速度(以及其他更复杂的因素)决定了多大的步骤。如果你将学习率降低一半,你需要两倍的步数才能到达那里。注意这与epochs无关,只是“更新步骤”(也就是批量)。

了解何时停止的典型方法是在训练模型时绘制测试数据的准确性。您的模型肯定可能会在某个时刻开始过度拟合。如果确实如此,测试精度将开始变差,这是一个明显的最佳停止点。

另请注意,批量数据不是连续的,每个批次都是通过置换数据随机选择的。下一次通过数据集将最终得到不同批次的数据,因此这些批次中的每一个都将产生不同的梯度更新。因此,即使两次通过数据集也不会在每个时期产生相同的更新集。

我实际上并不知道问题#1的答案,因为我没有多大地使用估算器API,但我90%确定它只是置换样本并在每个纪元后再次遍历它们。这是最常见的方法。