2016-07-08 10 views
8

私は、GPUを1つ(GeForce GTX 980 Ti、6GB)の控えめなマシンでInception V3をトレーニングしました。最大バッチサイズは約40であるように見えます。トレーニングTensorflow Inception-v3 Imagenetのハードウェア設定

inception_train.pyファイルで指定されたデフォルトの学習率設定を使用しました:initial_learning_rate = 0.1,num_epochs_per_decay = 30およびlearning_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という新しいトレーニングセッションを始めましたが、ここでは暗闇の中で握っています。

私のような小さなハードウェアの設定に適したデフォルトの推奨事項はありますか?

答えて

16

TL、DR:控えめなハードウェア設定から許容できる時間内にInception V3モデルをゼロから訓練するための既知の方法はありません。私は強く、あなたの希望する仕事に事前に訓練されたモデルを再訓練することをお勧めします。

あなたのような小さなハードウェアでは、パフォーマンスを最大限に引き出すことは難しいでしょう。一般的にCNNの場合、最大のバッチサイズが可能です。つまり、CNNの場合、トレーニング手順はGPUメモリに収まる最大バッチサイズによって制限されることがあります。

ダウンロードhereために利用可能なインセプションV3モデルは50 GPUの間で1600の効果的なバッチサイズで訓練を受けた - それぞれのGPUは、あなたのささやかなハードウェアを考えると32

のバッチサイズを実行したところ、私のナンバーワンの提案です上記のリンクから事前訓練されたモードをダウンロードし、手元にある個々のタスクのモデルを再学習してください。これはあなたの人生をもっと幸せにするでしょう。

初心者から練習して訓練をしてモデルの訓練成績に正確に合うように強く感じたら、insane手続きあなたの1GPU。 32

  • ストア実行
  • 繰り返しから勾配のバッチサイズで、この50回を

    1. 実行します。つまり、次の手順を実行することができます。
    2. 50バッチのグラジエントを平均します。
    3. すべての変数をグラデーションで更新します。
    4. 繰り返し

    私はあなたにまったく同じ性能を達成するために達成する必要があるであろうものの概念的な意味を与えるために、これを言及しています。あなたが言及したスピードの数を考えると、この手順には数ヶ月かかるでしょう。ほとんど実用的ではない。

    • 常に可能最大バッチサイズを使用して実行:あなたはまだ最初から訓練で強く興味を持っているとあなたができる最善を尽くしている場合

      はもっと現実的に、ここでいくつかの一般的なガイドラインです。あなたはすでにそれをやっているようです。すばらしいです。

    • CPUにバインドされていないことを確認してください。つまり、TensorBoardに表示されている入力処理キューが常に適度にいっぱいになっていることを確認してください。そうでない場合は、前処理スレッドの数を増やすか、可能であれば別のCPUを使用してください。
    • Re:学習率。同期トレーニングを常に実行している場合(GPUが1つのみの場合)、バッチサイズが大きいほど、許容できる学習率が高くなります。 NaNにつながっていない可能性の高い最高の学習を特定するために、一連のいくつかのクイック実行(たとえば、それぞれ数時間)を試してみます。あなたがそのような学習率を見つけたら、それを5〜10%で落として、それを実行してください。
    • num_epochs_per_decayおよびdecay_rateには、いくつかの戦略があります。 壊変あたり10エポック、0.001減衰係数によって強調された戦略は、評価精度が漸近するまでモデルを可能な限り長く叩くことです。そして、学習率を下げてください。これは簡単な戦略です。モデルのモニタリングで評価精度を確認し、実際にモデルが学習率を減衰させる前に漸近的に決定することを確認します。最後に、減衰係数は少しアドホックですが、10の累乗が良い経験則のように見えることによって低下します。

    また、これらは一般的なガイドラインであり、その他のアドバイスは異なる場合があります。より具体的なガイダンスを伝えることができない理由は、このサイズのCNNは、さほどハードウェアを設定していないと、最初から訓練されていないことが多いからです。

  • 1

    優れたヒント あなたと同様のセットアップを使用するトレーニングの優先順位があります。 これをチェックしてください - http://vision.princeton.edu/pvt/GoogLeNet/ これらの人々はGoogleNetを訓練しましたが、Caffeを使用しました。それでも、彼らの経験を勉強することは役に立ちます。

    関連する問題