回帰用畳み込みニュー​ラルネットワークを用​いて2次元数値配列を​入力とした時に、出力​も2次元数値配列にす​ることは不可能でしょ​うか?

1 次查看(过去 30 天)
Tamu
Tamu 2019-7-28
评论: Tamu 2019-7-29
回帰用畳み込みニューラルネットワークを使って、
2次元数値配列を入力した時に、2次元数値配列を出力として予測することを考えています。
(例)入力:[1,1,1;0,1,0;0,1,0] ⇒ 出力:[1,1,1;0,0,0;0,0,0]
「回帰問題を解くには、ネットワークの最後の回帰層の前に全結合層を配置する必要がある」と記述されているのですが、
この場合回帰用のネットワークでは出力のタイプとして2次元数値配列を設定することは不可能でしょうか?
ご教示ください。
よろしくお願いいたします。

采纳的回答

Kenta
Kenta 2019-7-29
こんにちは、可能です。以下のように全結合層の出力を9つに定義して、かつラベルを9つの出力×(データ数)あるものを用意すれば学習可能と思います。
fullyConnectedLayer(9)
  3 个评论
Kenta
Kenta 2019-7-29
编辑:Kenta 2019-7-29
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))
Tamu
Tamu 2019-7-29
ご丁寧な対応ありがとうございます!
添付して頂いたコードを試したいと思います。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 イメージを使用した深層学習 的更多信息

产品


版本

R2019a

Community Treasure Hunt

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

Start Hunting!