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

11 views (last 30 days)
Jo Sasaki
Jo Sasaki on 10 Dec 2019
Commented: Kenta on 7 Jan 2020
学習データの数が多く途中で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);

Accepted Answer

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

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!