CNN学習のチェックポイントからの学習再開方法
조회 수: 7 (최근 30일)
이전 댓글 표시
学習データの数が多く途中で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);
댓글 수: 0
채택된 답변
Kenta
2019년 12월 10일
こんにちは。おそらく、コード自体はただしく実行できていて、2回目の学習のエポック(イテレーション)が1からカウントされている、ということではないでしょうか。
2回目の学習も、通常のCNNのコードで、学習を継続したものかは意識していないので、その2回目の学習自体のエポック数が表示されているものと思います。
ただ、初期値自体は、1回目の学習のものを継承しているので、
1回目の学習から数えてエポックが、N(=1回目のエポック数)+1番目である(2回目の学習の視点から考えると1回目のエポック)とも考えられるのではないでしょうか。実際、ドキュメントのほうも、2回目の学習のイテレーションは1から記録されています。
また、デフォルトの設定では、学習がすすむにつれて、学習率が減少していくようになっているはずで、2回目の学習も同じ初期学習率で設定してしまうと、厳密には、学習の再スタートにはならないものと思います。
댓글 수: 1
Kenta
2020년 1월 7일
ちなみに、dlnetworkを使って、カスタムループを使えば、減衰の値も明確にわかるので、何度かに区切りながら学習したい場合は、このような方法も使えるかもしれません。
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Built-In Training에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!