ClassWeightsの設定方法

深層学習を使用したセマンティック セグメンテーションhttps://jp.mathworks.com/help/releases/R2018a/vision/examples/semantic-segmentation-using-deep-learning.html
をもとに自分で用意したデータセットで解析を行ったところ以下のようなエラーが出ました.
無題.png
以下にi_learningのコードを示します.
%ネットワークの作成
imageSize = [360 480 3];
numClasses = numel(classes);
lgraph = segnetLayers(imageSize,numClasses,'vgg16');
%クラスの重み付けを使用したクラスのバランス調整
imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount;
classWeights = median(imageFreq) ./ imageFreq;
pxLayer = pixelClassificationLayer('Name','labels','ClassNames',tbl.Name,'ClassWeights',classWeights);
lgraph = removeLayers(lgraph,'pixelLabels');
lgraph = addLayers(lgraph, pxLayer);
lgraph = connectLayers(lgraph,'softmax','labels');
%学習オプションの選択
options = trainingOptions('sgdm', ...
'Momentum',0.9, ...
'InitialLearnRate',1e-3, ...
'L2Regularization',0.0005, ...
'MaxEpochs',100, ...
'MiniBatchSize',2, ...
'Shuffle','every-epoch', ...
'VerboseFrequency',2);
%データ拡張
augmenter = imageDataAugmenter('RandXReflection',true,...
'RandXTranslation',[-10 10],'RandYTranslation',[-10 10]);
%学習の開始
pximds = pixelLabelImageDatastore(imdsTrain,pxdsTrain,'DataAugmentation',augmenter);
net= trainNetwork(pximds,lgraph,options);

 采纳的回答

Kenta
Kenta 2019-12-18
classWeights
と入力して、それぞれの値を教えてもらえますか?訓練データに、ある稀なラベルが含まれていなくて0で割っている状態なのではないかと思いました。
classWeights = median(imageFreq) ./ (imageFreq+0.0001);
などとすれば回避できると思いました。

10 个评论

Kodai Sato
Kodai Sato 2019-12-18
classWeightsはどこに入力すればよいのでしょうか?
コマンドウィンドウに入力すると関数または変数 'classWeights' が認識されません。と返ってきます.
imageFreq
そうですね、失礼いたしました。うえのように打って下さい。
Kodai Sato
Kodai Sato 2019-12-18
申し訳ありません
そちらの関数でも認識されませんでした
クラス別のピクセル数はグラフがあるので一応添付します
untitled.png
tbl.ImagePixelCount
何度もすいません、こちらを打ってみてください。
以下のようになりました
>> tbl.ImagePixelCount
ans =
20719666
4297113
0
0
3,4番目の出現数が0なので、0で割ると、無限大になってしまいますね。
そのため、クラスの重みも無限になってしまい。エラーを返したということですね。
そのため、
imageFreq = tbl.PixelCount ./ (tbl.ImagePixelCount+1);
などとして、分母が0になるのを防ぐと、うまく実行できると思います。
その後のコードで変更があれば、適宜変更していただけると幸いです。
ただ、ここまで大きくクラスに偏りがあると、課題設計を少し変更した方がいいかもしれません。
何度も申し訳ありません
上のコードのように変更しましたが同様なエラーが発生します
imageFreq =
0.1032
0.0000
0
0
imageFreq = tbl.PixelCount ./ (tbl.ImagePixelCount+1);
classWeights = median(imageFreq) ./ (imageFreq+0.001)+0.0001;
などとすれば、ひとまず動きますでしょうか?
tbl.PixelCount
を実行したところこちらも0であったため
imageFreq = (tbl.PixelCount+1) ./ (tbl.ImagePixelCount+1);
としたところ実行できました
何度も申し訳ありませんでした
Kenta
Kenta 2019-12-19
はい、無事実行できてよかったです。

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Deep Learning Toolbox 的更多信息

产品

版本

R2019b

Community Treasure Hunt

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

Start Hunting!