繁体   English   中英

一个时期的训练数据的大小在张量流中是否重要?

[英]Does size of training data for an epoch matter in tensorflow?

假设我们有50万项训练数据,那么一次训练一个模型还是一次训练“ n”个模型,或者一次训练全部模型,这有关系吗?

假设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之间有什么区别?

此选项之间有区别。 通常,您必须使用批处理大小来训练例如128次数据迭代。 您也可以使用批处理大小为1的批处理,例如您的第一个示例。 这种方法的优点是可以输出神经网络的训练效率。

如果您要一次学习所有数据,则速度会快一点,但是只有到最后,您才能知道效率是否良好。

最好的方法是进行批处理并按堆栈学习。 因此,您可以在每个堆栈之后输出效率并控制效率。

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

从数学上讲,这两种方法是不同的。 一种称为随机梯度下降,另一种称为间歇梯度下降。 您缺少最常用的一种-小型批次梯度下降。 关于这个主题已经有很多研究,但是基本上不同的批次大小具有不同的收敛特性。 通常,人们使用的批处理大小大于1,但不是完整的数据集。 这通常是必需的,因为大多数数据集无法一次全部放入内存。 同样,如果您的模型使用批处理归一化,那么一个批处理大小将不会收敛。 本文讨论了批次大小(除其他事项外)对性能的影响。 得出的结论是,较大的批量大小也不能一概而论。 (他们实际上认为这不是批次大小本身,而是事实是,当批次较大时,您的更新较少。我建议开始使用32的批次大小,并尝试观察批次大小如何影响性能。

这是我链接的论文中批量大小对培训和验证性能的影响图。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM