LSTMに対するシーケンスを含む複数データの入力の方法に関して
Mostrar comentarios más antiguos
現在、深層学習を使用した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が混ざって一つのシーケンスになってしまいます。
少々稚拙な書き方になってしまっていると思いますが、何卒ご教授いただければ幸いです。
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre Parallel and Cloud en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!