エラーコード エラー: trainNetwork (行 184) 無効な学習データです​。回帰タスクの応答は​、数値応答のベクトル​、行列または 4D 配列でなければなりません。応答に NaN を含めてはなりません。

2 views (last 30 days)
takmakome
takmakome on 5 Jul 2022
Commented: takmakome on 7 Jul 2022
imds = imageDatastore('機械学習500',"IncludeSubfolders",true,"LabelSource","foldernames");
T = imshow(readimage(imds,1));
data = augmentedImageDatastore([5000 10],imds,"ColorPreprocessing","rgb2gray")
画像とラベルの定義
imagefiles = imds.Files
imagelabels = imds.Labels;
ytraining = imds.Labels;
yval = imds.Labels;
data1 = readall(data);
A = data1.input
B = data1.response
%T = table(imagefiles,imagelabels,'~',"VariableNames",{'image1','label1'})
Dt= zeros(128,128,1,5000);
Dv = zeros(128,128,1,5000);
for i=1:numel(imds.Files)
I = imread (imds.Files{i});
Dt(:,:,1,i) = I;
II = imread (imds.Files{i});
Dv(:,:,:,i) = II;
end
net = trainNetwork(Dt,B,layers,options); Bの処理がわかりません。
エラーコード エラー: trainNetwork (行 184) 無効な学習データです。回帰タスクの応答は、数値応答のベクトル、行列または 4D 配列でなければなりません。応答に NaN を含めてはなりません。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 5 Jul 2022
【回答1】上記質問と同じく、カテゴライズ型の応答データ(B)を数値に変換すればエラーは解消するはずです。回帰用のCNN学習に対してカテゴライズ型の応答データを入力する為エラーが発生していると想定します。
B = double(B);
【回答2】手書き数字画像が0~9のどれか認識させたいのであれば「回帰タスク」ではなく「分類タスク」を選択すべきです。具体的には学習させるCNNレイヤの最後の回帰レイヤを分類レイヤに変更します。
layers = [ % (途中省略) ...
regressionLayer]; %【変更前】
layers = [ % (途中省略) ...
classificationLayer]; %【変更後】
【詳細な説明と想定した事】
imds = imageDatastore('機械学習500',"IncludeSubfolders",true,"LabelSource","foldernames");
imageDatastore関数の1番目の引数(location)に当たる'機械学習500'が何なのか明示されていませんが、過去の質問の経緯からdigitTest4DArrayData関数で読み取る「深層学習用のデータセット」の内「数字データセット」だと思います。そのフォルダ構成は以下の様になっており、手書き数字画像10,000ファイルが10個のフォルダ(0~9)に分類されています。これを上記imageDatastore関数で読み込むとフォルダ名が「応答(数値情報)」としてカテゴライズ型のデータになります。
ls /MATLAB/toolbox/nnet/nndemos/nndatasets/DigitDataset/
0 1 2 3 4 5 6 7 8 9 digitTest.csv digitTrain.csv
もしそうだとすれば、目的(手書き数字画像が0~9のどれか認識したい)に対して「分類タスク」を選択すべきです。「回帰タスク」を選んだという事は「予測子(イメージ)」に対する「応答(数値情報)」は「数字情報(カテゴライズ型)」ではなく「数値スカラー」を入力すべきです。
もし上記想定ではなく、例えば手書き文字の回転角度別にフォルダ分類されフォルダ名に回転角度を付けたデータ群をImageDatastore関数で読み込んだのであれば、下記の例のように回帰タスクを用いるべきですが、「応答(回転角度)」が数値スカラーではなくカテゴライズ型になってしまうので、先の回答の様な方法で数値スカラーに変換する必要があります。
  2 Comments
Atsushi Ueno
Atsushi Ueno on 5 Jul 2022
質問文に「プログラムの入力データは何か」「プログラムの目的は何か」が明示されていません。
あれこれと想像を膨らませ「こうかもしれない」「いやこうかもしれない」と回答するのも大変です。
takmakome
takmakome on 7 Jul 2022
以後気を付けます

Sign in to comment.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!