このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
畳み込みニューラルネットワークの層の指定の説明に従ってニューラルネットワークの層を定義したら,次のステップはネットワークの学習オプションの設定です。関数trainingOptions
を使用してグローバル学習パラメーターを定義します。ネットワークに学習させるには,trainingOptions
が返すオブジェクトを関数trainNetwork
への入力引数として使用します。次に例を示します。
选择= trainingOptions(“亚当”);trainedNet = trainNetwork(数据、层选项);
学習可能なパラメーターのある層には,学習パラメーターを調節するためのオプションもあります。詳細については,畳み込み層と全結合層のパラメーターの設定を参照してください。
trainNetwork
では,確率的勾配降下法のさまざまなバリアントを使用したネットワーク学習が可能です。trainingOptions
の引数solverName
を使用して,最適化アルゴリズムを指定します。損失を最小化するために,これらのアルゴリズムは,損失関数の負の勾配の方向に小さなステップで進み,ネットワークパラメーターを更新します。
“亚当”
(自适应估计时刻,適応モーメント推定)ソルバーは,多くの場合,最初に試すのに適したオプティマイザーです。“rmsprop”
(平方根平均二乗伝播)および“个”
(モーメンタム項付き確率的勾配降下法)オプティマイザーを試して,学習が改善されるかを確認することもできます。どのソルバーがより有効に機能するかは問題によって異なります。さまざまなソルバーの詳細は,確率的勾配降下法を参照してください。
ソルバーは,各ステップでデータのサブセットを使用してパラメーターを更新します。このサブセットを”ミニバッチ”と呼びます。ミニバッチのサイズは,trainingOptions
の名前と値のペアの引数“MiniBatchSize”
を使用して指定できます。それぞれのパラメーター更新を“反”復と呼びます。データセット全体を一巡することを1”“エポックと呼びます。学習するエポックの最大回数は,trainingOptions
の名前と値のペアの引数“MaxEpochs”
を使用して指定できます。既定値は30ですが,小規模なネットワークの場合や,学習の大部分が既に済んでいる微調整や転移学習の場合には,より小さい数のエポックを選択することもできます。
既定では,学習前に1回,データがシャッフルされます。この設定は,名前と値のペアの引数“洗牌”
を使用して変更できます。
グローバル学習率は,trainingOptions
の名前と値のペアの引数“InitialLearnRate”
を使用して指定できます。既定では,trainNetwork
は学習プロセス全体でこの値を使用します。特定のエポック数ごとに,学習率に係数を乗算して学習率を変更することを選択できます。学習プロセス全体で小さな固定の学習率を使用する代わりに,学習の初期は大きな学習率を選択し,最適化しながらこの値を徐々に小さくできます。そうすることで学習時間が短縮されるのと同時に,学習の進行に合わせて損失の最小値に向けてステップをより小さくできます。
ヒント
学習中にミニバッチの損失が南
になる場合,学習率が高すぎると考えられます。学習率をたとえば3分の1に下げて,ネットワーク学習を再開してみてください。
学習率を徐々に小さくするには,名前と値のペアの引数“LearnRateSchedule”、“分段”
を使用します。このオプションを選択すると,trainNetwork
0.1は10エポックごとにの係数を初期学習率に乗算します。初期学習率からの縮小に使用する係数とエポック数は,名前と値のペアの引数“LearnRateDropFactor”
と“LearnRateDropPeriod”
をそれぞれ使用して指定できます。
学習中にネットワークの検証を実行するには,trainingOptions
の名前と値のペアの引数“ValidationData”
を使用して,検証データを指定します。既定では,trainNetwork
は50回の反復ごとに,検証データの応答を予測し検証の損失と精度(回帰ネットワークの平方根平均二乗誤差)を計算することによって,ネットワークを検証します。検証頻度は,名前と値のペアの引数“ValidationFrequency”
を使用して変更できます。ネットワークに予測時と学習中で動作が異なる層(ドロップアウト層など)がある場合,検証精度が学習(ミニバッチ)精度より高くなる可能性があります。検証データを使用して,検証損失が減少しなくなったときに学習を自動的に停止することもできます。自動検証停止をオンにするには,名前と値のペアの引数“ValidationPatience”
を使用します。
学習中に一定の間隔で検証を実行すると,ネットワークが学習データに過適合しているかどうかを判断するのに役立ちます。よくある問題は,ネットワークが学習データを単に”記憶”したにすぎず,新しいデータについて正確な予測を可能にする一般的な特徴を学習していないことです。ネットワークが過適合しているかどうかを確認するには,学習損失および学習精度を対応する検証メトリクスと比較します。学習損失が検証損失より大幅に小さい,または学習精度が検証精度よりも大幅に高い場合,ネットワークは過適合しています。
過適合を抑えるために,データ拡張の追加を試すことができます。augmentedImageDatastore
を使用して,入力イメージのランダム変換を実行します。これにより,ネットワークがオブジェクトの位置や向きを正確に記憶することを防止できます。また,名前と値のペアの引数“L2Regularization”
を使用してL2正則化を大きくしたり,畳み込み層の後にバッチ正規化層を使用したり,ドロップアウト層を追加したりすることも試せます。
GPUが利用可能な場合,既定ではtrainNetwork
はそれを学習に使用します。そうでない場合,trainNetwork
はCPUを使用します。または、名前と値のペアの引数“ExecutionEnvironment”
を使用して,目的の実行環境を指定することもできます。1つのCPU (“cpu”
), 1つのGPU (“图形”
),複数のGPU (“multi-gpu”
),ローカルの並列プールまたは計算クラスター(“平行”
)を指定できます。“cpu”
以外のすべてのオプションには并行计算工具箱™が必要です。GPUでの学習には以3.0计算能力上のCUDA®対応GPUが必要です。
深度学习工具箱™では,学習の際,エポックの終了ごとに,ネットワークを.matファイルとして保存できます。この定期的な保存は,ネットワークまたはデータセットが大規模であり,学習に時間がかかる場合に特に便利です。学習が何らかの理由で中断された場合,最後に保存されたチェックポイントネットワークから学習を再開できます。trainNetwork
にチェックポイントネットワークを保存させる場合は,trainingOptions
の名前と値のペアの引数“CheckpointPath”
を使用してパス名を指定しなければなりません。指定したパスが存在していない場合,trainingOptions
はエラーを返します。
trainNetwork
は,チェックポイントネットワークファイルに一意の名前を自動的に割り当てます。例の名前net_checkpoint__351__2018_04_12__18_09_52.mat
351年では反復回数,2018年_04_12
は日付,18 _09_52
はtrainNetwork
がネットワークを保存した時刻を表します。チェックポイントネットワークファイルは,ダブルクリックするか,コマンドラインで読み込みコマンドを使用すると,読み込むことができます。次に例を示します。
负载net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork
の入力引数に使用することで,学習を再開できます。次に例を示します。
trainNetwork (XTrain YTrain、net.Layers选项)
学習パラメーターは,畳み込み層や全結合層など,学習可能なパラメーターのある層にtrainingOptions
で指定したグローバル値とは異なる値に設定できます。たとえば,バイアスまたは重みの学習率を調整するために,層のBiasLearnRateFactor
またはWeightLearnRateFactor
プロパティの値をそれぞれ指定できます。関数trainNetwork
は,trainingOptions
を使用して指定された学習率とこれらの係数を乗算します。同様に,これらの層の重みとバイアスのL2正則化係数は,BiasL2Factor
プロパティおよびWeightL2Factor
プロパティをそれぞれ指定することによって指定できます。trainNetwork
は,trainingOptions
を使用して指定されたL2正則化係数とこれらの係数を乗算します。
層の重みは学習可能なパラメーターです。層の权重
プロパティを使用して,重みに直接,初期値を指定できます。ネットワークの学習時に,層の权重
プロパティが空ではない場合,trainNetwork
は权重
プロパティを初期値として使用します。权重
プロパティが空の場合,trainNetwork
は層のWeightsInitializer
プロパティによって指定された初期化子を使用します。
ネットワークは,ネットワークの層および学習パラメーターを指定した後,学習データを使用して学習させます。次の例にあるように,データ,層,学習オプションはすべて関数trainNetwork
の入力引数です。
layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fulllyconnectedlayer (10) softmaxLayer classificationLayer];选择= trainingOptions(“亚当”);事先= trainNetwork(数据、层选项);
学習データは行,列,表,またはImageDatastore
オブジェクトにすることができます。詳細は,関数trainNetwork
のリファレンスページを参照してください。
Convolution2dLayer
|FullyConnectedLayer
|trainingOptions
|trainNetwork