在Tensorflow中,一个epoch中的训练数据大小有影响吗?

2024-09-30 20:24:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有价值50万个项目的培训数据,那么我们是一次培训一个项目,还是一次培训n个项目,还是一次培训所有项目,这有关系吗?在

考虑inputTrainingData和{}是[[]],而{}是任何一般的tensorflow训练步骤。在

选项1一次训练一个项目-

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

选项2一次训练-

^{pr2}$

就培训质量而言,上述方案1和2之间有什么区别吗?在


Tags: 数据项目runinforlen关系tensorflow
3条回答

这两种方法在数学上是不同的。一种叫做随机梯度下降,另一种叫做批量梯度下降。你错过了最常用的一种——小批量梯度下降。关于这个问题已经有很多研究,但是基本上不同的批量大小有不同的收敛特性。通常,人们使用的批处理大小大于1,但不是完整的数据集。这通常是必要的,因为大多数数据集不能同时放入内存中。另外,如果您的模型使用批处理规范化,那么一个批大小将不会收敛。本文paper讨论了批处理大小(以及其他因素)对性能的影响。其结果是,较大的批量并不能普遍适用。(事实上,他们认为这不是批处理大小本身,而是当批处理更大时更新更少。我建议批量大小为32开始试验,看看批量大小如何影响性能。在

这是一个图表,显示了批量大小对培训和验证性能的影响。在

enter image description here

这两个选项是不同的。通常,您必须使用batchsize来训练例如128次数据迭代。 您还可以使用批处理大小为1,如第一个示例所示。 这种方法的优点是可以输出神经网络的训练效率。在

如果你在一个地方学习所有的数据,你的速度会快一点,但你只有在最后才知道你的效率是好的。在

最好的方法是制作一个batchsize并按栈学习。所以你可以在每一个堆栈之后输出你的效率,并控制你的效率。在

是的,有区别。选项1的内存消耗要少得多,但精确度也要低得多。选项2可能会吃掉你所有的内存,但应该证明更准确。但是,如果一次使用所有训练集,一定要限制步数以避免过度适应。 理想情况下,成批使用数据(通常在16到256之间)。 大多数优化技术都是“随机的”,即它们依赖于样本的统计样本来估计模型的更新。 总而言之: -更多数据=>;更准确(但内存更多)=>;过度拟合的风险更高(因此限制培训步骤的数量)

相关问题 更多 >