在适度的硬件设置上训练Tensorflow Inception-v3 Imagenet

时间:2016-07-08 04:59:28

标签: computer-vision tensorflow deep-learning imagenet

我一直在使用单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 个答案:

答案 0 :(得分:19)

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

在像您这样的小型硬件上,很难获得最佳性能。一般来说,对于CNN来说,最好的性能是可能的最大批量。这意味着对于CNN而言,训练过程通常受限于GPU内存中可容纳的最大批量大小。

可下载{3}}的Inception V3模型经过50个GPU的有效批量处理1600训练 - 其中每个GPU的批量大小为32个。

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

作为一个思想实验(但几乎不实用)..如果你觉得特别强迫通过训练从头开始训练模型完全匹配模型的训练表现,你可以做以下疯狂程序。也就是说,您可以运行以下过程:

  1. 以批量大小32
  2. 运行
  3. 存储运行中的渐变
  4. 重复这50次。
  5. 平均50批次的渐变。
  6. 使用渐变更新所有变量。
  7. 重复
  8. 我只是提到这一点,让您从概念上了解为达到完全相同的性能需要完成的工作。鉴于您提到的速度数字,此过程将需要数月才能运行。很难实用。

    更现实的是,如果您仍然对从头开始训练并尽力做到最好,那么这里有一些通用指南:

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

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

答案 1 :(得分:1)

很棒的提示。 使用与您类似的设置进行培训是优先考虑的。 看看这个 - http://3dvision.princeton.edu/pvt/GoogLeNet/ 这些人训练GoogleNet,但是,使用Caffe。不过,研究他们的经验会很有用。