CNNでのTrainingOptionでの学習状況の表示のさせ方
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
0 개 추천
R2017bを使用して分類学習を行っているのですが,学習オプションの'plot'を利用して,学習状況の表示をさせています. この時に表示されるグラフの'Smoothed'を非表示にしたいのですが,何か方法や設定ができるのでしょうか. また,この時に表示される軸の文字の大きさについても変更できますか?
宜しくお願いします.
채택된 답변
0 개 추천
残念ながら、R2017bでは'Smoothed'を非表示にしたりフォントを変更するなどの変更を加えることはできません。 もし差し支えなければ、'Smoothed' を非表示にされたい理由や、他にもここは変更できるようになった方がよいなどもございましたら教えて頂けませんでしょうか?開発サイドへ要望としてフィードバックいたします。
学習状況を表示する方法として、学習オプションの 'OutputFcn' に表示用の関数を設定する方法があります。これは独自に表示させるプログラムを書く必要があります(それなりに手間です)が、表示内容は自由に設定することができます。ここに設定した関数は学習前、学習後、そして各反復後に実行されます。
댓글 수: 11
KENji
2017년 12월 7일
回答ありがとうございます.
やはり,2017a同様に'OutputFcn'を使用しなければならないのですね. 要望等はないのですが,以下のようなコードを書いてみたのですが,Validationの誤差と精度についてプロットしてもらうには,どうすればよいでしょうか?
function plotTrainAc(info)
persistent plot0bj
if info.State=="start"
plot0bj=animatedline('LineStyle','--');
xlabel("Iteration")
ylabel("Epoch")
elseif info.State=="iteration"
addpoints(plot0bj,info.Epoch,info.ValidationLoss)
drawnow limitrate nocallbacks
end
end
appointsの部分でエラーが出ているようなのですが,よくわかりません 宜しくお願いします.
michio
2017년 12월 7일
エラーの内容がわかると嬉しいですが、、Figureのハンドルを persistent変数に加えるとどうなりますか?
function plotTrainAc(info)
persistent plot0bj hfigure
if info.State=="start"
hfigure = figure;
plot0bj=animatedline('LineStyle','--');
xlabel("Iteration")
ylabel("Epoch")
elseif info.State=="iteration"
figure(hfigure)
addpoints(plot0bj,info.Epoch,info.ValidationLoss)
drawnow limitrate nocallbacks
end
end
KENji
2017년 12월 7일
エラーなのですが,
原因:
エラー: matlab.graphics.animation.AnimatedLine/addpoints
引数 Y はベクトルでなければなりません。
エラー: LastEnpe>plotTrainAc (line 46)
addpoints(plot0bj,info.Epoch,info.ValidationLoss)
というようなエラーが出ています. 教えいていただいた,コードでは学習は行われているようですが,プロット画面の起動がされませんでした.
michio
2017년 12월 8일
addpoints を呼び出している行にブレイクポイントを設定すれば、直接原因を確認できるかと想いますが、おそらく info.ValidationLoss が空なのではと推測しています。trainingOptions で 'ValidationData' は設定されていますか?
KENji
2017년 12월 8일
何度も,回答いただきありがとうございます. validationDataは,imagedatastoreを使って設定しています. また,一度はValidationLossが計算され,Figureウィンドウが起動するのですが,その後の計算でエラーが出てしまいます. ループでの計算の設定がうまくいっていないのでしょうか?
optionsA=trainingOptions('sgdm',...
'InitialLearnRate',0.0001,...
'MaxEpochs',100',...
'ValidationData',testPerfData,....
'OutputFcn',@(info)plotTrainAc(info));

michio
2017년 12월 8일
こちらでも頂いた plotTrainAc.m を使ってR2017bで実行していますがエラーなく表示されます。
https://jp.mathworks.com/help/nnet/ref/trainnetwork.html にあるサンプルコードからの抜粋です。そのままコピペして実行できるはずですので、試しに実行して頂けますか?
% Load the data as an |ImageDatastore| object.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos',...
'nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath,...
'IncludeSubfolders',true,'LabelSource','foldernames');
% Divide the data set so that each category in the training set has 750 images
% and the testing set has the remaining images from each label.
trainingNumFiles = 10;
rng(1) % For reproducibility
[trainDigitData,testDigitData] = splitEachLabel(digitData,...
trainingNumFiles,'randomize');
Define the convolutional neural network architecture.
layers = [imageInputLayer([28 28 1]);
convolution2dLayer(5,20);
reluLayer();
maxPooling2dLayer(2,'Stride',2);
fullyConnectedLayer(10);
softmaxLayer();
classificationLayer()];
Set the options to default settings for the stochastic gradient descent with momentum. Set the maximum number of epochs at 20, and start the training with an initial learning rate of 0.001.
options = trainingOptions('sgdm','MaxEpochs',20,...
'InitialLearnRate',0.0001,...
'OutputFcn',@plotTrainAc,'ValidationData',trainDigitData);
Train the network.
convnet = trainNetwork(trainDigitData,layers,options);
KENji
2017년 12월 8일
何度もすみません. 念のため,再インストールして実行してみたのですが,やはり'addpoints'の関数でYに'ValidationLoss'を入れるとエラーが出てしまいます.(TrainingLossの場合はうまくいきました.)
michio
2017년 12월 8일
確認ですが、私が上のコメントで提示したプログラムのコピペ実行でもエラーが発生するということでしょうか?
KENji
2017년 12월 8일
いえ,ご提示いただいたプログラムではうまくいきました. ただ,関数定義内の
addpoints(plot0bj,info.Epoch,info.TrainingLoss)
のTrainingLossをValidationLossに変えるとエラーが出ている状況です. すみませんが,よろしくお願いします.
michio
2017년 12월 9일
TrainingLoss にしていましたか、失礼いたしました。
今回のエラーは ValidationLoss が iteration 毎に計算されないことが要因の様デスので、
if ~isempty(info.ValidationLoss)
addpoints(plot0bj,info.Epoch,info.ValidationLoss)
drawnow limitrate nocallbacks
end
という条件式を入れる必要がありそうです。学習オプションの 'ValidationFrequency' で Validation の頻度を指定することが出来ますので、ここを1にすれば上の条件式は必要ありませんが、毎回 Validation を行うのも学習効率を考えると大変かと思います。
下記は修正を加えた plotTrainAc です。
function plotTrainAc(info)
persistent plot0bj hfigure
if info.State=="start"
hfigure = figure;
plot0bj=animatedline('LineStyle','--');
xlabel("Iteration")
ylabel("ValidationLoss")
elseif info.State=="iteration"
figure(hfigure)
if ~isempty(info.ValidationLoss)
addpoints(plot0bj,info.Iteration,info.ValidationLoss)
drawnow limitrate nocallbacks
end
end
end
KENji
2017년 12월 10일
懇切丁寧に教えていただきありがとうございます. うまくいきました. 検証頻度を1にしないと,空の配列を参照してエラーが出ていたんですね.
ありがとうございました.
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기
참고 항목
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)