CNN学習のチェックポイントからの学習再開方法

2 ビュー (過去 30 日間)
Jo Sasaki
Jo Sasaki 2019 年 12 月 10 日
コメント済み: Kenta 2020 年 1 月 7 日
学習データの数が多く途中でPCが処理落ちしてしまい学習を途中からスタートさせたいのですが、
の記事の通りやってみてもエポック1からスタートしてしまいます。
下記のコードに間違いはないと思うのですが...
%学習過程
wavedata = imageDatastore('G:\学習データ','Readfcn',@readDatastorezeroCSV,'IncludeSubfolders',true,'LabelSource','foldernames','FileExtensions','.csv');
drilllabel = wavedata.Labels;
[drilltrain,drillvalidation] = splitEachLabel(wavedata,0.9,'randomized');
options = trainingOptions('adam','ExecutionEnvironment','multi-gpu','VerboseFrequency' ,1000,'MaxEpochs',2000,'MiniBatchSize',500, 'ValidationData',drillvalidation,'ValidationPatience',inf,'VerboseFrequency',1000,'Plots','training-progress','CheckpointPath','G:\学習データ\Checkpoint');
%学習の実行
[drillnet,info] = trainNetwork(drilltrain,layers, options);
%学習がストップ
%学習実行手前まで実行する
%学習の再開
load('G:\学習データ\Checkpoint\net_checkpoint__39312__2019_12_09__11_11_12.mat','net');
drillnet = trainNetwork(drilltrain,net.Layers,options);

採用された回答

Kenta
Kenta 2019 年 12 月 10 日
こんにちは。おそらく、コード自体はただしく実行できていて、2回目の学習のエポック(イテレーション)が1からカウントされている、ということではないでしょうか。
2回目の学習も、通常のCNNのコードで、学習を継続したものかは意識していないので、その2回目の学習自体のエポック数が表示されているものと思います。
ただ、初期値自体は、1回目の学習のものを継承しているので、
1回目の学習から数えてエポックが、N(=1回目のエポック数)+1番目である(2回目の学習の視点から考えると1回目のエポック)とも考えられるのではないでしょうか。実際、ドキュメントのほうも、2回目の学習のイテレーションは1から記録されています。
また、デフォルトの設定では、学習がすすむにつれて、学習率が減少していくようになっているはずで、2回目の学習も同じ初期学習率で設定してしまうと、厳密には、学習の再スタートにはならないものと思います。
  1 件のコメント
Kenta
Kenta 2020 年 1 月 7 日
ちなみに、dlnetworkを使って、カスタムループを使えば、減衰の値も明確にわかるので、何度かに区切りながら学習したい場合は、このような方法も使えるかもしれません。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStatistics and Machine Learning Toolbox 入門 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!