cnn学習データにおける最終検証精度について
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jo Sasaki
el 20 de Ag. de 2019
Respondida: Kenta
el 20 de Ag. de 2019
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
6 comentarios
Kenta
el 20 de Ag. de 2019
ここに同様の質問がありました。ほかにも類似した質問がありました。比較的起こりやすい現象のようです。さきほどの早期終了はあまり良い解決策ではないかもしれません。
ここにチェックポイントのことが書いていています。各エポックごとに学習器を保存して、最終エポックの手前の学習器を利用したらよいのではないかとも思いましたが、上にある通り、batchnormalizationやdropoutに原因があれば、こちらもあまり効果はないかもしれません。
手始めに、dropout層を削除するか、最後のみにしてみてはどうでしょうか。dropout層は最後に置くだけでも良い気がします。
Respuesta aceptada
Kenta
el 20 de Ag. de 2019
はい、解決してよかったです。このような、最終の検証でのジャンプに対しては、バッチ正則化層やドロップアウト層を除けば解決することが多いようですね。
最終の検証は検証データ全体に対する推定精度で、学習曲線のプロットはバッチごとの検証のようで、その差がこのジャンプを生んでいたのかもしれません。
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre 信号の機械学習および深層学習 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!