Multidimensional input to SequenceInputLayer
Show older comments
Hello dear community,
i am trying to train a neural network for a regression task.
I do have different cases of data though and the model should be able to differentiate between the different data sets.
For the training, i therefore thought, that i have Data with 2 Channels (2 input neurons), 3 Batches (3 different operating points to be trained) and 50 T (50 timesteps).
Therefore i would have a multi dimensional input matrix.
The target matrix would have one output, 3 Batches and also 50 timesteps.
However, i keep on getting the error:
Error using trainNetwork (line 191)
The training sequences are of feature dimension 2 50 but the input layer expects sequences of feature dimension 2.
Error in delme2 (line 46)
net = trainNetwork(permute(X, [1 3 2]), permute(Y, [1 3 2]), layers, options);
I have checked the internet, but i don't really find a solution to this.
Thank you in Advance !
Here is the Code
% Manuell definierte Dimensionen
B = 3; % Anzahl der Arbeitspunkte (Samples)
T = 50; % Anzahl der Zeitschritte
C = 2; % Anzahl der Eingangsmerkmale
O = 1; % Anzahl der Ausgabemerkmale
% Beispielhafte Daten für verschiedene Arbeitspunkte (APs)
X = zeros(C, B, T);
Y = zeros(O, B, T);
% Arbeitspunkt 1
X(1, 1, :) = 2000;
X(2, 1, :) = 70;
Y(1, 1, :) = rand(1, 1, T) * 100 + 50;
% Arbeitspunkt 2
X(1, 2, :) = 4000;
X(2, 2, :) = 50;
Y(1, 2, :) = rand(1, 1, T) * 100 + 40;
% Arbeitspunkt 3
X(1, 3, :) = 3000;
X(2, 3, :) = 60;
Y(1, 3, :) = rand(1, 1, T) * 100 + 45;
% Netzwerkparameter
numHiddenUnits = 50; % Anzahl der LSTM-Zellen
% Netzwerkarchitektur definieren
layers = [ ...
sequenceInputLayer(C) % C Eingangsmerkmale
lstmLayer(numHiddenUnits, 'OutputMode', 'sequence') % LSTM Layer
fullyConnectedLayer(O) % O Ausgabemerkmale
regressionLayer]; % Regressions-Layer für kontinuierliche Ausgaben
% Trainingsoptionen festlegen
options = trainingOptions('adam', ...
'MaxEpochs', 100, ...
'MiniBatchSize', 1, ...
'GradientThreshold', 1, ...
'InitialLearnRate', 0.01, ...
'Verbose', false, ...
'Plots', 'training-progress');
% Netz trainieren
net = trainNetwork(permute(X, [1 3 2]), permute(Y, [1 3 2]), layers, options);
% Permutieren, um X und Y in die erwartete Form C x T x B und O x T x B zu bringen
% Beispielhafte Inferenz für einen neuen Arbeitspunkt
XTest = zeros(C, 1, T); % Testdaten in der Form C x 1 x T
XTest(1, 1, :) = 3500;
XTest(2, 1, :) = 65;
% Kurve vorhersagen
YPred = predict(net, permute(XTest, [1 3 2])); % Permutieren, um XTest in die erwartete Form C x T x 1 zu bringen
% Vorhergesagte Temperaturkurve anzeigen
plot(squeeze(YPred)); % Squeeze, um die 2D-Kurve für das Plotting zu erhalten
xlabel('Zeitschritte');
ylabel('Vorhergesagte Temperatur');
title('Vorhergesagte Temperaturkurve für neuen Arbeitspunkt');
Accepted Answer
More Answers (0)
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!