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

3 次查看(过去 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 个)

Community Treasure Hunt

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

Start Hunting!