Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在机器学习中,过多的训练步骤会扰乱训练过程吗?_Python_Tensorflow_Machine Learning_Neural Network_Deep Learning - Fatal编程技术网

Python 在机器学习中,过多的训练步骤会扰乱训练过程吗?

Python 在机器学习中,过多的训练步骤会扰乱训练过程吗?,python,tensorflow,machine-learning,neural-network,deep-learning,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

我有一个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

那么,我有两个问题:

  • 由于我只有899组有效数据,但我将步骤设置为10000,那么步骤899后的Tensorflow训练是什么?它只是回到顶端,重复训练吗
  • 如果我训练了超过899个步骤,它会弄乱与特征和标签相关的模型吗?或者它是多余的,因为训练循环只是在同一个数据集上反复进行

  • 我曾在其他帖子中询问过在培训过程中没有减少的损失,我现在在想,如果我需要培训的数据集太少,那么所有多余的步骤都是无用的。

    对数据集进行多次迭代是非常常见和正常的。模型的每个“步骤”(即每个批次)都需要一个渐变更新步骤。从直观的角度来看,它朝着该小批量产品所指定的方向迈出了一步。它并不是通过看一次来了解关于某个特定样本的所有信息,它只是离目标更近了一步,而学习速度(以及其他更复杂的因素)决定了一步有多大。如果你把你的学习速度减半,你需要两倍的步骤才能达到目标。注意,这与时代无关,只是“更新步骤”(又名批次)

    知道何时停止的典型方法是在训练模型时绘制随时间变化的测试数据精度。当然,您的模型可能会在某个时候开始过度拟合。如果这样做,测试精度将开始变差,这是一个明显的最佳停止点


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


    我实际上不知道问题1的答案,因为我不太使用估计器API,但我90%确信它只是简单地排列样本,并在每个历元后再次迭代。这是最常见的方法。

    对数据集进行多次迭代是非常常见和正常的。模型的每个“步骤”(即每个批次)都需要一个渐变更新步骤。从直观的角度来看,它朝着该小批量产品所指定的方向迈出了一步。它并不是通过看一次来了解关于某个特定样本的所有信息,它只是离目标更近了一步,而学习速度(以及其他更复杂的因素)决定了一步有多大。如果你把你的学习速度减半,你需要两倍的步骤才能达到目标。注意,这与时代无关,只是“更新步骤”(又名批次)

    知道何时停止的典型方法是在训练模型时绘制随时间变化的测试数据精度。当然,您的模型可能会在某个时候开始过度拟合。如果这样做,测试精度将开始变差,这是一个明显的最佳停止点


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


    我实际上不知道问题1的答案,因为我不太使用估计器API,但我90%确信它只是简单地排列样本,并在每个历元后再次迭代。这是最常见的方法。

    除了过度拟合之外,使用相同的数据进行重新训练可以实现什么?我不确定是否有比数据集更多的步骤进行重新训练。如果是这样的话,我们不想浪费时间一次又一次地做同样的事情,对吗?除非这里有一些有益的部分,这就是我为什么要问的原因。使用相同的数据重新训练可以实现什么——除了过度拟合之外?我不确定比数据集更多的步骤是否正在进行重新训练。如果是这样的话,我们不想浪费时间一次又一次地做同样的事情,对吗?除非这里有一些有益的部分,这就是我为什么要问的原因。“还要注意,数据批不是连续的,每个批都是通过排列数据随机选择的。”这是指洗牌吗?在我的例子中,可以洗牌批处理,但我不想洗牌批处理中的数据。我的意思是洗牌,是的,在大多数实现中,每个时代都会发生洗牌,我想在estimator API中也会发生。我不确定我是否理解你说的不想在一个批次中洗牌是什么意思。除非这是一个RNN(在这种情况下,时间步不会被洗牌),否则您的数据将被视为IID,并且每个批次都将被随机排列。我想你可以禁用它,但如果你想这样做,你应该真正理解为什么你要这么做,因为这是非常不正常的。因为我有意让我的数据每3751行有意义,所以我希望每次流都在3751行。这就是为什么我将批次大小设置为3751。它会随机抽取我的3751行数据作为一个批次吗?还是按顺序处理数据?这是什么模型?如果不是RNN、RL或其他时间序列模型,则该模型很可能假设IID,并且在这些假设下不会表现良好。如果您的数据是连续的,那么您可能应该查看RNN,在这种情况下,您将对数据集进行建模,以便