augmentedI​mageDatast​oreと特徴データを​結合したcombin​edDatastor​eを用いてtrain​Networkするに​は?

17 views (last 30 days)
画像と、画像に対応する特徴データを入力とする深層学習ネットワークの学習に関する質問です。
画像 (imageDatastore)、特徴データ (arrayDatastore) をcombineで結合したCombinedDatastoreを用いて、回帰型深層学習ネットワークの学習(trainNetwork)を行っています。
画像のデータストアがimageDatastoreやarrayDatastoreの場合、特徴データと結合後、trainNetworkにより問題なく学習が進行します。
同じデータを用いて画像のaugmentationを行いたく、
dsXTrain = augmentedImageDatastore([size_y size_x], imagedatastore)
によりaugmentedImageDatastoreに変換し、これを特徴データとcombineし、trainNetworkに用いると、以下のメッセージが表示され、学習を行うことができません。どのようにすればよいのでしょうか?
使い方によるエラー trainNetwork
水平方向に連結される table はすべて、同じ行数でなければなりません。cell 配列と table を連結する
場合、cell 配列と table は同じ行数でなければなりません。

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 23 Jun 2022
各データストアのミニバッチサイズが違うと同じエラーが再現しました。combineする際にreadSize, minibatchSizeを揃えてあげれば大丈夫かと思います。下記が例です。
%% イメージデータストア
dataFolder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(dataFolder, ...
'IncludeSubfolders',true);
%% augmentedデータストア
auds = augmentedImageDatastore([100 100],imds);
%% 入力用特徴量arrayデータストア
numData = auds.NumObservations;
dummyArray = rand(numData,1);
arrdsIn = arrayDatastore(dummyArray,"ReadSize",auds.MiniBatchSize);
%% 応答子用数値ベクトル
numData = auds.NumObservations;
dummyArray = rand(numData,1);
arrdsOut = arrayDatastore(dummyArray, "ReadSize",auds.MiniBatchSize);
%% combine
cds = combine(arrdsIn,auds,arrdsOut);
read(cds)
ans = 128×3 table
Var1 input Var3 _______ _______________ ________ 0.84635 {100×100 uint8} 0.88035 0.90818 {100×100 uint8} 0.12305 0.67433 {100×100 uint8} 0.76929 0.32715 {100×100 uint8} 0.25515 0.37823 {100×100 uint8} 0.5072 0.15886 {100×100 uint8} 0.99285 0.38741 {100×100 uint8} 0.399 0.11833 {100×100 uint8} 0.7312 0.73402 {100×100 uint8} 0.069723 0.25619 {100×100 uint8} 0.28101 0.3847 {100×100 uint8} 0.62227 0.03869 {100×100 uint8} 0.94875 0.26308 {100×100 uint8} 0.41549 0.5522 {100×100 uint8} 0.46006 0.86584 {100×100 uint8} 0.017776 0.81635 {100×100 uint8} 0.74653
%% 学習
net = trainNetwork(cds,lgraph,options); % lgraphのInputNamesとcdsの入力データの順番が整合しているかを確認
解決しなければ、すみません、再度お知らせ願います。
  3 Comments
Shunichi Kusano
Shunichi Kusano on 7 Jul 2022
「学習後のモデル性能が低い」というのはそもそも学習に用いたデータセットでも精度が出てないということでしょうか。つまりlossが下がらないということですか?
判断材料としてそれぞれのパターンで学習に用いたコードと、学習後のモデル性能を評価した際のコード、それから学習した際の学習曲線をシェアいただけると何かわかるかもしれません。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!