首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在适度硬件设置上训练Tensorflow Inception-v3 Imagenet

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

Stack Overflow用户
提问于 2016-07-08 12:59:28
回答 2查看 6.1K关注 0票数 10

我一直在一台普通的机器上训练盗梦空间V3,只有一颗GPU (GeForce GTX980Ti,6 6GB)。最大批处理大小似乎约为40

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

代码语言:javascript
复制
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从头开始了一个新的培训课程,但在这里有点摸索。

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

EN

回答 2

Stack Overflow用户

发布于 2016-07-11 05:33:08

TL,DR:目前还没有已知的方法可以在适当的硬件设置下,在可容忍的时间内从头开始训练初始V3模型。我强烈建议重新训练一个预先训练好的模型来完成你想要的任务。

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

可用于下载here的初始V3模型在50个GPU上的有效批处理大小为1600时进行了训练--其中每个GPU运行32批处理大小。

考虑到你有限的硬件,我的第一个建议是从上面的链接下载预训练模式,并为你手头的单个任务重新训练模型。这会让你的生活更快乐。

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

使用批处理大小为32的

  1. 运行
  2. 将run
  3. 中的梯度重复50次。
  4. 使用gradients.
  5. Repeat

对来自50个变量的梯度进行平均

我提到这一点只是为了让您有一个概念性的感觉,即需要完成什么才能实现完全相同的性能。考虑到您提到的速度数字,此过程将需要几个月的时间才能运行。几乎不实用。

更现实地说,如果你仍然对从头开始训练并尽你所能做到最好感兴趣,这里有一些通用的指导原则:

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

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

票数 20
EN

Stack Overflow用户

发布于 2016-12-06 17:50:09

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38259166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档