10

我一直在一台配备单个 GPU(GeForce GTX 980 Ti,6GB)的普通机器上训练 Inception V3。最大批量大小似乎约为40.

我使用了文件中指定的默认学习率设置inception_train.pyinitial_learning_rate = 0.1和. 经过几周的训练,我能够达到的最佳准确度如下(大约 500K-1M 次迭代):num_epochs_per_decay = 30learning_rate_decay_factor = 0.16

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,但在这里有点摸不着头脑。

对于像我这样的小型硬件设置的良好默认设置有什么建议吗?

4

2 回答 2

20

TL,DR:没有已知的方法可以在适度的硬件设置中在可容忍的时间内从头开始训练 Inception V3 模型。我强烈建议针对您想要的任务重新训练预训练模型。

在像您这样的小型硬件设置上,很难实现最大性能。一般来说,对于 CNN,最好的性能是尽可能大的批量。这意味着对于 CNN 的训练过程通常受到 GPU 内存可以容纳的最大批量大小的限制。

可在此处下载的 Inception V3 模型经过 50 个 GPU 的有效批量大小为 1600 的训练——其中每个 GPU 运行的批量大小为 32。

鉴于您的硬件适中,我的第一个建议是从上面的链接下载预训练模式,然后针对您手头的单个任务重新训练模型。这会让你的生活更快乐。

作为一个思想实验(但几乎不实用).. 如果你觉得特别有必要通过从头开始训练来完全匹配预训练模型的模型训练性能,你可以在你的 1 个 GPU 上执行以下疯狂的过程。即,您可以运行以下过程:

  1. 以 32 的批大小运行
  2. 存储运行中的梯度
  3. 重复此操作 50 次。
  4. 平均 50 个批次的梯度。
  5. 使用梯度更新所有变量。
  6. 重复

我提到这一点只是为了让您从概念上了解要实现完全相同的性能需要完成什么。鉴于您提到的速度数字,此过程将需要数月才能运行。几乎不实用。

更现实地说,如果您仍然对从头开始训练并尽力而为非常感兴趣,那么这里有一些通用指南:

  • 始终以尽可能大的批量运行。看起来你已经在这样做了。伟大的。
  • 确保您不受 CPU 限制。也就是说,确保输入处理队列总是适度满的,如 TensorBoard 上显示的那样。如果不是,请增加预处理线程的数量或使用不同的 CPU(如果可用)。
  • 回复:学习率。如果您始终在运行同步训练(如果您只有 1 个 GPU,则必须如此),那么批量大小越大,可容忍的学习率就越高。我会尝试一系列快速运行(例如,每次运行几个小时),以确定可能不会导致 NaN 的最高学习。在找到这样的学习率后,将其降低 5-10% 并以此运行。
  • 至于 num_epochs_per_decay 和 decay_rate,有几种策略。每个衰减 10 个 epoch,0.001 衰减因子突出显示的策略是尽可能长时间地锤击模型,直到评估精度渐近线。然后降低学习率。这是一个很好的简单策略。我将验证您在模型中看到的内容,即在您允许模型衰减学习率之前,监控评估准确性并确定它确实是渐近线的。最后,衰减因子有点特别,但降低 10 的幂似乎是一个很好的经验法则。

再次注意,这些是一般指导方针,其他人甚至可能会提供不同的建议。我们无法为您提供更具体指导的原因是,这种规模的 CNN 通常不会在适度的硬件设置上从头开始训练。

于 2016-07-10T21:33:07.940 回答
1

优秀的提示。使用与您类似的设置进行训练有优先权。看看这个 - http://3dvision.princeton.edu/pvt/GoogLeNet/ 这些人训练了 GoogleNet,但是使用了 Caffe。尽管如此,研究他们的经验还是很有用的。

于 2016-12-06T09:50:09.093 回答