我一直在使用单GPU(GeForce GTX 980 Ti,6GB)的普通机器上训练Inception V3。最大批量大小似乎在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,基于此论坛中的其他一些帖子,但它有点抓住了黑暗在这里。
有关像我这样的小型硬件设置的良好默认值的任何建议吗?
答案 0 :(得分:19)
TL,DR:从适度的硬件设置开始,在可容忍的时间内,没有已知的方法可以从头开始训练Inception V3模型。我强烈建议在预期的任务上重新训练预先训练好的模型。
在像您这样的小型硬件上,很难获得最佳性能。一般来说,对于CNN来说,最好的性能是可能的最大批量。这意味着对于CNN而言,训练过程通常受限于GPU内存中可容纳的最大批量大小。
可下载{3}}的Inception V3模型经过50个GPU的有效批量处理1600训练 - 其中每个GPU的批量大小为32个。
鉴于您的硬件适中,我的第一个建议是从上面的链接下载预训练模式,并重新训练您手头的单个任务的模型。这会让你的生活更加幸福。
作为一个思想实验(但几乎不实用)..如果你觉得特别强迫通过训练从头开始训练模型完全匹配模型的训练表现,你可以做以下疯狂你的1 GPU上的em>程序。也就是说,您可以运行以下过程:
我只是提到这一点,让您从概念上了解为达到完全相同的性能需要完成的工作。鉴于您提到的速度数字,此过程将需要数月才能运行。很难实用。
更现实的是,如果您仍然对从头开始训练并尽力做到最好,那么这里有一些通用指南:
再次注意,这些是一般指导原则,其他人甚至可能提供不同的建议。我们无法为您提供更具体的指导的原因是,这种规模的CNN通常不会在适当的硬件设置上从头开始接受培训。
答案 1 :(得分:1)
很棒的提示。 使用与您类似的设置进行培训是优先考虑的。 看看这个 - http://3dvision.princeton.edu/pvt/GoogLeNet/ 这些人训练GoogleNet,但是,使用Caffe。不过,研究他们的经验会很有用。