2つの出力を持つの回​帰ニューラルネットワ​ークを構築したい。

7 views (last 30 days)
Y.T
Y.T on 17 Jan 2024
Answered: Naoya on 22 Jan 2024
2つの出力を持つ回帰ニューラルネットワークを構築したいです。
入力Aには3×2450のcell配列
出力Bには2×2450のcell配列
としています。
プログラムを実行すると以下のようなエラーが出力されてしまいます。
エラー: network/train (行 347)
Output data size does not match net.outputs{2}.size.
層の数やユニット数を変更してもエラーが改善しないのですが、
複数出力のニューラルネットワークを構築したい場合はこのようなプログラム構成で合っているのでしょうか。
入力Aには3×2450のcell配列
出力Bには1×2450のcell配列
で出力のユニット数を1にすると上記のプログラムは正常に動作します。
以下が作成しているプログラムです。
net = network;
net.numInputs = 3; % 入力層の数を指定
net.numLayers = 3; % 隠れ層(2)と出力層(1)の数
net.layers{1}.size = 15; % 隠れ層1のユニット数(15)
net.layers{2}.size = 5; % 隠れ層2のユニット数(5)
net.layers{3}.size = 2; % 出力層のユニット数
net.biasConnect = [1;1;1];
net.inputConnect = [1 1 0;0 0 1;0 0 0]; % 入力層から直接接続される隠れ層/出力層設定
net.LayerConnect = [0 0 0;1 0 0;0 1 0]; % 隠れ層同士の接続状況
net.outputConnect = [0 0 1]; % 出力への接続状況
net.trainFcn = 'trainlm'; % 学習関数
% 伝達関数指定
net.layers{1}.transferFcn = 'logsig';
net.layers{2}.transferFcn = 'logsig';
net.layers{3}.transferFcn = 'purelin';
view(net)
net.plotFcns = {'plotperform','plottrainstate','ploterrhist','plotregression'};
net.initFcn = 'initlay';
net.performFcn = 'mse';
net.divideFcn = 'dividerand';
net.divideMode = 'time';
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% 学習
[net,tr] = train(net,A,B);
[y,xf,af] = net(A);

Accepted Answer

Naoya
Naoya on 22 Jan 2024
view コマンドで 生成されたnetwork を確認しましたが、今回のモデルは、入力側は3層でそれぞれの層には 1つのニューロンが含まれ、出力側は1層で 2つのニューロンが含まれるということになると思います。
入力側は 3x2450 のセルで問題ありません。
出力側は 1x2450 のセルにします。
各出力側に対するセルには、 2つのニューロンの情報が含まれることになりますので、2x1 のベクトルがそれぞれ含まれることになります。
A = num2cell(rand(3,2450);
B = rand(2,2450);
B = con2seq(B);
上記の A,B は 今回の trainに与えるべく入出力データの例となります。

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!