在较低的硬件配置上训练Tensorflow Inception-v3 Imagenet

11

我使用一台配置适中的机器,只有一张GPU(GeForce GTX 980 Ti,6GB)来训练Inception V3。最大批处理大小似乎约为40

我使用了inception_train.py文件中指定的默认学习率设置:initial_learning_rate = 0.1num_epochs_per_decay = 30learning_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,但这有点盲目。

对于像我这样的小型硬件设置,有什么好的默认值推荐吗?

2个回答

21

简而言之,目前没有已知的方法可以在一台普通硬件设备上训练出一个Inception V3模型,并且时间可接受。我强烈建议你重新训练一个预训练模型以适应你所需的任务。

在像你这样的小型硬件设备上,要达到最佳性能非常困难。通常来说,对于CNN模型,最佳表现需要使用尽可能大的batch size。这意味着对于CNN模型,训练过程通常受限于可以放入GPU内存中的最大batch size。

可以从这里下载的Inception V3模型是在50个GPU上,每个GPU运行32个batch size的情况下,使用1600的有效batch size进行训练的。

考虑到你的普通硬件设备,我第一建议是从上述链接下载预训练模型,并将其重新训练以适应你手头的具体任务。这会使你的生活更加愉快。

作为思想实验(但几乎不切实际)……如果你特别想精确匹配预训练模型的训练表现,并试图从头开始训练,你可以在一个GPU上执行以下疯狂的过程。即,你可以执行以下步骤:

  1. 使用batch size为32运行
  2. 存储运行时的梯度
  3. 重复50次。
  4. 对50个batch的梯度求平均值。
  5. 使用这些平均值来更新所有变量。
  6. 重复

我只是提到这个思想实验,以便让你了解要实现相同的性能需要做什么。考虑到你提到的速度数字,这个过程需要运行数月时间。几乎不切实际。

更现实的情况是,如果你仍然非常有兴趣从头开始训练并尽力而为,以下是一些通用指导原则:

  • 始终使用最大的batch size进行运行。看起来你已经这样做了。太好了。
  • 确保你的计算资源不受限制。即,确保输入处理队列始终是适度满的,如在TensorBoard上显示的那样。如果不是,则增加预处理线程的数量或使用其他可用的CPU。
  • 关于学习率。如果您总是运行同步训练(如果您只有1个GPU,则必须如此),则批量大小越大,容忍的学习率就越高。我建议尝试一系列几个小时的快速运行,以确定可以不导致NaN的最高学习率。找到这样的学习率后,将其降低5-10%并使用它进行训练。
  • 至于num_epochs_per_decay和decay_rate,有几种策略。 每次衰减10个时期,衰减因子为0.001强调的策略是尽可能长时间地对模型进行训练,直到评估精度呈指数级别下降。然后再降低学习率。这是一个简单而好的策略。在允许模型衰减学习率之前,请验证您在模型监视中看到的评估精度是否确实呈指数级别下降,并确定它已达到渐近值。最后,衰减因子有点专门,但是将其降低10的幂似乎是一个不错的经验法则。

请再次注意,这些都是一般指导方针,其他人可能会提供不同的建议。我们无法给您更具体的指导,因为在较小的硬件设置上从头开始训练此大小的CNN是很少见的。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接