cnn学習データにおける最終検証精度について
Afficher commentaires plus anciens
cnn学習において最終エポックに達した際に検証精度が下がる現象に困っています。
いろいろパラメータを変えたり、学習データと検証データの比率を変えるなどしましたが直接的な原因がわかりません。
こういった現象の対策法等ございますでしょうか?
layers=[
imageInputLayer([1 1501]);
%layer1
convolution2dLayer([1 256],30,'stride',1);
batchNormalizationLayer
reluLayer();
dropoutLayer
maxPooling2dLayer([1 3],'stride',1);
%layer2
convolution2dLayer([1 64],30,'stride',1);
batchNormalizationLayer
reluLayer();
dropoutLayer
maxPooling2dLayer([1 3],'stride',1);
%layer3
convolution2dLayer([1 64],30,'stride',1);
batchNormalizationLayer
reluLayer();
dropoutLayer
maxPooling2dLayer([1 3],'stride',1);
%layer4
convolution2dLayer([1 32],50,'stride',1);
batchNormalizationLayer
reluLayer();
dropoutLayer
maxPooling2dLayer([1 3],'stride',1);
%layer5
convolution2dLayer([1 25],50,'stride',1);
batchNormalizationLayer
reluLayer();
dropoutLayer
maxPooling2dLayer([1 3],'stride',1);
fullyConnectedLayer(100);
dropoutLayer
fullyConnectedLayer(50);
fullyConnectedLayer(4);
softmaxLayer();
classificationLayer();
];
%データ読み込み
wavedata = imageDatastore('学習データ','Readfcn',@fftreadDatastorezeroCSV,'IncludeSubfolders',true,'LabelSource','foldernames','FileExtensions','.csv');
%ラベルつける
drilllabel = wavedata.Labels;
%検証データ指定
drillvalidation = imageDatastore('検証データ','Readfcn',@fftreadDatastorezeroCSV,'IncludeSubfolders',true,'LabelSource','foldernames','FileExtensions','.csv');
drilllabel = drillvalidation.Labels;
% %訓練、テストデータ分割
[drilltrain,drilltest] = splitEachLabel(wavedata,0.94444,'randomized');
%学習の設定
options = trainingOptions('adam','ExecutionEnvironment','multi-gpu','LearnRateSchedule','piecewise','LearnRateDropPeriod',10,'LearnRateDropFactor',0.5,'MaxEpochs',70,'MiniBatchSize',512, 'ValidationData',drillvalidation,'ValidationPatience',inf,'VerboseFrequency',50,'Plots','training-progress');
%学習の実行
tic
[drillnet,info] = trainNetwork(drilltrain, layers, options);
%drillnetが学習モデルとして格納
toc
.png)
6 commentaires
Kenta
le 20 Août 2019
特に解決案があるわけではないんですが、1つ質問させてください。計算のためのオプションがmulti-gpuになっていますが、単にGPUとしたときは同様の現象は見られますか?
'ExecutionEnvironment','gpu'
Jo Sasaki
le 20 Août 2019
Kenta
le 20 Août 2019
ありがとうございます。不思議ですね。
'ValidationPatience',3
などにして、早期終了したときも同様のことは起こりますか?
Jo Sasaki
le 20 Août 2019
Kenta
le 20 Août 2019
ここに同様の質問がありました。ほかにも類似した質問がありました。比較的起こりやすい現象のようです。さきほどの早期終了はあまり良い解決策ではないかもしれません。
ここにチェックポイントのことが書いていています。各エポックごとに学習器を保存して、最終エポックの手前の学習器を利用したらよいのではないかとも思いましたが、上にある通り、batchnormalizationやdropoutに原因があれば、こちらもあまり効果はないかもしれません。
手始めに、dropout層を削除するか、最後のみにしてみてはどうでしょうか。dropout層は最後に置くだけでも良い気がします。
Jo Sasaki
le 20 Août 2019
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Deep Learning Toolbox dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!.png)