Effacer les filtres
Effacer les filtres

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

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

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur イメージを使用した深層学習 dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!