LSTMに対するシーケンスを含む複数データの入力の方法に関して
이전 댓글 표시
現在、深層学習を使用したsequence-to-sequenceの回帰を行っています。しかしシーケンスデータだけでは学習の情報量としては不足しており、入力に新たなシーケンスでない特徴データを追加しようとしています。
そのためにLSTMに対してシーケンスデータと、その他のデータを同時に入力したいのですが、セル配列として入力するとエラーが起きてしまいます。
具体的には
Layers = [ ...
sequenceInputLayer(3)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(1)
myRegressionLayer('mae')
];
options = trainingOptions('adam', ...
'MaxEpochs',40,...
'MiniBatchSize',32,...
'GradientThreshold',1,...
'InitialLearnRate',1e-2, ...
'Verbose',false, ...
'Plots', 'training-progress');
Train1:n*tのdouble配列のシーケンスデータ、特徴次元1(t=10)
Train2:n*2のdouble配列のデータ、特徴次元2
XTrain:Train1とTrain2を合体させたもの、特徴次元3
YTrain:n*tのセル配列のシーケンスデータ(t=10)
ここでTrain1とTrain2を一つのセル配列にまとめて格納するため
XTrain = cell(n, 1);
for i = 1:n
XTrain{i, 1} = {Train1(i, :), Train2(i, :)};
end
[net, ~] = trainNetwork(XTrain, YTrain, Layers, options);
とすると、「無効な学習データです。予測子はシーケンスの N 行 1 列の cell 配列でなければなりません。ここで N はシーケンスの数です。すべてのシーケンスは同じ特徴次元と、少なくとも 1 つのタイム ステップをもたなければなりません。」というエラーが起こります。
XTrainのサイズはN*1となってはいますが、このエラーメッセージの原因としてはセル配列XTrainの中身がセル配列になっているのが原因らしく、
かといって、次のようにdouble配列のまま入力すると
Train = cell(n, 1);
for i = 1:n
XTrain{i, 1} = [Train1(i, :)'; Train2(i, :)'];
end
[net, ~] = trainNetwork(XTrain, YTrain, Layers, options);
とすると、当然ながら
「トレーニング シーケンスの特徴次元は 12 ですが、入力層には特徴次元 3 のシーケンスが必要です。」
というエラーが起き、特徴次元数がシーケンスの長さ+2になってしまい、特徴次元がシーケンス長に対応してしまううえ、Train1とTrain2が混ざって一つのシーケンスになってしまいます。
少々稚拙な書き方になってしまっていると思いますが、何卒ご教授いただければ幸いです。
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Parallel and Cloud에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!