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

조회 수: 15 (최근 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 CenterFile Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!