なぜ、trainNetwork 関数で学習すると学習の途中経過がNaNになりますか?
2 views (last 30 days)
Show older comments
MathWorks Support Team
on 19 May 2017
Answered: MathWorks Support Team
on 19 May 2017
trainNetwork関数を利用して、学習を進めています。
ネットワークのパラメータを変更しながら、学習すると、
パラメータや学習データによって、「Mini-batch Loss」等の途中経過の値が「NaN」になることがあり、モデルが作成できない状況が発生します。
Accepted Answer
MathWorks Support Team
on 19 May 2017
学習ログの出力結果の一部が「NaN」になる場合は、設定している学習率が高すぎる場合に生じる傾向があります。
この問題を抑制する方法としては、以下が検討頂ける項目となります。
(1) 初期の学習率を小さく設定する
→ trainingOptions の InitialLearnRate を 既定の 0.01 よりも小さい値に設定します
(2) 学習率を学習時に可変になるように設定する
→ trainingOptions の LearnRateSchedule を 既定の "none" から "piecewise" に変更します。現状では、学習率は常に固定値を利用します。
関連する学習率を可変にするパラメータに該当する項目としては、
InitialLearnRate
LearnRateDropFactor
LearnRateDropPeriod
となります。
InitialLearnRate は、上記での紹介と重複となりますが初期の学習率を設定します。
(既定では、 0.01 と設定されます)
LearnRateDropFactor は、実際にどの程度学習率を変更させるかの調整値となります。
既定では、0.1 と設定されますが、 0 ~ 1 の範囲で、減衰率を設定します。
LearnRateDropPeriod は、何Epoch 毎に更新を行うかの調整パラメータとなります。
既定では 10 と設定されております。
0 Comments
More Answers (0)
See Also
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!