【问题标题】:Training Tensorflow Inception-v3 Imagenet on modest hardware setup在适度的硬件设置上训练 Tensorflow Inception-v3 Imagenet
【发布时间】:2016-11-10 13:55:54
【问题描述】:

我一直在一台配备单个 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,但在这里有点摸不着头脑。

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

【问题讨论】:

    标签: computer-vision tensorflow deep-learning imagenet


    【解决方案1】:

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

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

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

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

    作为一个思想实验(但几乎不实用).. 如果您特别有必要通过从头开始训练来完全匹配预训练模型的模型训练性能,您可以执行以下操作疯狂 em> 程序在您的 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 通常不会在适度的硬件设置上从头开始训练。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-22
        • 2016-09-17
        • 2017-10-24
        • 2018-03-10
        • 1970-01-01
        相关资源
        最近更新 更多