回帰用畳み込みニューラルネットワークを用いて2次元数値配列を入力とした時に、出力も2次元数値配列にすることは不可能でしょうか?
3 views (last 30 days)
Show older comments
回帰用畳み込みニューラルネットワークを使って、
2次元数値配列を入力した時に、2次元数値配列を出力として予測することを考えています。
(例)入力:[1,1,1;0,1,0;0,1,0] ⇒ 出力:[1,1,1;0,0,0;0,0,0]
ネットワーク層の作成 の箇所で、
「回帰問題を解くには、ネットワークの最後の回帰層の前に全結合層を配置する必要がある」と記述されているのですが、
この場合回帰用のネットワークでは出力のタイプとして2次元数値配列を設定することは不可能でしょうか?
ご教示ください。
よろしくお願いいたします。
0 Comments
Accepted Answer
Kenta
on 29 Jul 2019
こんにちは、可能です。以下のように全結合層の出力を9つに定義して、かつラベルを9つの出力×(データ数)あるものを用意すれば学習可能と思います。
fullyConnectedLayer(9)
3 Comments
Kenta
on 29 Jul 2019
Edited: Kenta
on 29 Jul 2019
9つの出力×データ数です。
例えば、手書き数字イメージが1)どれだけ回転しているか2)0でないピクセル値をもつ、ピクセル数はいくつか、という2つの項目を回帰するものは添付のようになります。このコードを走らせてみるとイメージがつくかと思います。そちらのほうを試していただけますか。
close all;clear;clc
[XTrain,~,YTrain] = digitTrain4DArrayData;
[XValidation,~,YValidation] = digitTest4DArrayData;
non_zero_idx=squeeze(XTrain(:,:,1,:)>0);
non_zero_num=squeeze(sum(non_zero_idx,[1 2]));
YTrain2=[YTrain,non_zero_num];
non_zero_idx2=squeeze(XValidation(:,:,1,:)>0);
non_zero_num2=squeeze(sum(non_zero_idx2,[1 2]));
YValidation2=[YValidation,non_zero_num2];
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
averagePooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
averagePooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
dropoutLayer(0.2)
fullyConnectedLayer(2)
regressionLayer];
miniBatchSize = 128;
validationFrequency = floor(numel(YTrain)/miniBatchSize);
options = trainingOptions('sgdm', ...
'MiniBatchSize',miniBatchSize, ...
'MaxEpochs',10, ...
'InitialLearnRate',1e-3, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.1, ...
'LearnRateDropPeriod',20, ...
'Shuffle','every-epoch', ...
'ValidationData',{XValidation,YValidation2}, ...
'ValidationFrequency',validationFrequency, ...
'Plots','training-progress', ...
'Verbose',false);
net = trainNetwork(XTrain,YTrain2,layers,options);
YPredicted = predict(net,XValidation);
predictionError = YValidation2 - YPredicted;
squares = predictionError.^2;
rmse = sqrt(mean(squares))
More Answers (0)
See Also
Categories
Find more on イメージを使用した深層学習 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!