我一直在一台普通的机器上训练盗梦空间V3,只有一颗GPU (GeForce GTX980Ti,6 6GB)。最大批处理大小似乎约为40。
我使用了inception_train.py文件中指定的默认学习率设置:initial_learning_rate = 0.1、num_epochs_per_decay = 30和learning_rate_decay_factor = 0.16。经过几周的训练,我能够达到的最佳精度如下(大约500K-1M迭代):
2016-06-06 12:07:52.245005: precision @ 1 = 0.5767 recall @ 5 = 0.8143 [50016 examples]
2016-06-09 22:35:10.118852: precision @ 1 = 0.5957 recall @ 5 = 0.8294 [50016 examples]
2016-06-14 15:30:59.532629: precision @ 1 = 0.6112 recall @ 5 = 0.8396 [50016 examples]
2016-06-20 13:57:14.025797: precision @ 1 = 0.6136 recall @ 5 = 0.8423 [50016 examples]我试着在训练接近尾声时摆弄设置,但在准确性方面看不到任何改进。
我根据这个论坛上的其他一些帖子,用num_epochs_per_decay = 10和learning_rate_decay_factor = 0.001从头开始了一个新的培训课程,但在这里有点摸索。
对于像我这样的小型硬件设置,有什么好的默认设置建议吗?
发布于 2016-07-11 05:33:08
TL,DR:目前还没有已知的方法可以在适当的硬件设置下,在可容忍的时间内从头开始训练初始V3模型。我强烈建议重新训练一个预先训练好的模型来完成你想要的任务。
在像您这样的小型硬件设置上,将很难实现最大性能。一般来说,对于CNN来说,最好的性能是使用尽可能大的批量。这意味着对于CNN的训练过程通常受到GPU内存中可以容纳的最大批处理大小的限制。
可用于下载here的初始V3模型在50个GPU上的有效批处理大小为1600时进行了训练--其中每个GPU运行32批处理大小。
考虑到你有限的硬件,我的第一个建议是从上面的链接下载预训练模式,并为你手头的单个任务重新训练模型。这会让你的生活更快乐。
作为一个思想实验(但几乎不实用) ..如果你觉得特别有必要通过从头开始训练来精确匹配预训练模型的训练性能,你可以在你的1个GPU上执行以下疯狂的过程。也就是说,您可以运行以下过程:
使用批处理大小为32的
对来自50个变量的梯度进行平均
我提到这一点只是为了让您有一个概念性的感觉,即需要完成什么才能实现完全相同的性能。考虑到您提到的速度数字,此过程将需要几个月的时间才能运行。几乎不实用。
更现实地说,如果你仍然对从头开始训练并尽你所能做到最好感兴趣,这里有一些通用的指导原则:
再次注意,这些是一般的指导方针,其他人甚至可能提供不同的建议。我们不能给你更具体的指导的原因是,这种大小的CNN通常不是在适度的硬件设置上从头开始训练的。
发布于 2016-12-06 17:50:09
很棒的建议。使用与您的设置类似的设置进行训练是有优先权的。看看这个- http://3dvision.princeton.edu/pvt/GoogLeNet/这些人训练了GoogleNet,但使用的是咖啡因。尽管如此,研究他们的经验将是有用的。
https://stackoverflow.com/questions/38259166
复制相似问题