2017-03-03 62 views
1

假设我们有500k项目的训练数据,如果我们一次一个训练模型或者一次训练一个项目,或者一次训练一个项目,这有什么关系吗?张量流中的时代问题的训练数据的大小?

考虑到inputTrainingDataoutputTrainingData[[]]train_step是任何通用张量流训练步骤。

选项1个火车一次一个项目 -

for i in range(len(inputTrainingData)): 
    train_step.run(feed_dict={x: [inputTrainingData[i]], y: [outputTrainingData[i]], keep_prob: .60}, session= sess) 

选项2列车上一次全部 -

train_step.run(feed_dict={x: inputTrainingData, y: outputTrainingData, keep_prob: .60}, session= sess) 

有作为选项1和2之间的任何差别以上就培训质量而言呢?

+0

它通常是由于频繁的更新权重使用,因为它使用较少的内存和培训可以更快,以及。质量明智的应该没什么关系,但是非常小的批次可能会导致不太准确的预测。 – umutto

+0

你可以批量的100号培训。 – CrisH

+0

@umutto谢谢。 “批量很小,准确性较低” - 因此,1批量可以在培训中做出重大改变? – Achilles

回答

1

是的,有区别。选项1的内存消耗少得多,但也不太准确。选项2可能会吃掉所有的RAM,但应该证明更准确。但是,如果您一次使用所有训练集,请务必限制步骤数以避免过度拟合。 理想情况下,批量使用数据(通常在16和256之间)。大多数优化技术是“随机的”,即它们依靠示例的统计样本来估计模型更新。 总结: - 更多数据=>更高的准确性(但更多的记忆)=>更高的过度风险(因此限制训练步骤的数量)

+0

感谢您的详细解答。我使用1种方法的批处理大小获得了更好的结果,但我猜可能是因为数据不好或其他原因。 – Achilles

1

此选项有所不同。通常你必须使用批处理来训练例如128次迭代的数据。 你也可以使用一个批处理大小,就像你们的第一个例子。 该方法的优点是可以输出神经网络的训练效率。

如果你正在学习所有的数据,你会快一点,但是如果你的效率很高,你只会在最后知道。

最好的方法是做一个批处理和堆栈学习。所以你可以在每个堆栈之后有效地输出你并控制你的效率。

0

数学上这两种方法是不同的。一个称为随机梯度下降,另一个称为批梯度下降。您错过了最常用的一个 - 迷你批量梯度下降。关于这个话题已经有很多研究,但基本不同的批量大小有不同的收敛性质。通常人们使用的批量大于1,但不是完整的数据集。这通常是必要的,因为大多数数据集不能一次装入内存。此外,如果您的模型使用批量标准化,那么批量大小不会收敛。这paper讨论批量大小(除别的以外)对性能的影响。结论是,较大的批量大小并不一致。 (他们实际上认为这不是批量大小本身,而是批量更大时更新次数较少的事实,我建议批量大小为32,以开始实验,看看批量大小是如何影响性能的,

下面是批量的从我挂纸训练和验证性能带来的效果图。

enter image description here

相关问题