Invalid training data. Predictors and responses must have the same number of observations. In trainNetwork function, multiple featureInputLayer, neural network for regression
Mostra commenti meno recenti
Hi Everyone,
I am trying to build a multiple-input feedforward neural network for regression. I got the idea of the what the input and output structure should be from here. For the network architecture, I followed this documentation.
Here's my network architecture:

Here's my relevant code with some arbitrary parameters:
clear all
close all
clc
%% Load data
rng("default")
nobs = 24;
numFeatures =[42,6];
numResponses = 1;
XTrain = {rand(numFeatures(1),nobs,"single");rand(numFeatures(2),nobs,"single")};
YTrain = {rand(numResponses,nobs,"single")};
numHiddenUnits = [10,20;15,12;10,5]; % row 1 = NN1 (named S); row 2 = NN2 (named ET); row 3 = NNcombined (no specific name);
dropput_prob = 0.3;
maxEpochs = 10;
initial_LR = 0.001;
%% NN architecture
lgraph = layerGraph;
lgraph = addLayers(lgraph,featureInputLayer(numFeatures(1,1),"Name","layers_S_in"));
lgraph = addLayers(lgraph,featureInputLayer(numFeatures(1,2),"Name","layers_ET_in"));
l_prev_S = "layers_S_in";
l_prev_ET = "layers_ET_in";
for i = 1:length(numHiddenUnits(1,:))
% row 1 = NN1; row 2 = NN2; row 3 = NNcombined;
if numHiddenUnits(1,i)> 0
layername_S = "layers_S_hidden" + string(i);
lgraph = addLayers(lgraph,fullyConnectedLayer(numHiddenUnits(1,i),"Name",layername_S));
lgraph = connectLayers(lgraph,l_prev_S,layername_S);
l_prev_S = layername_S;
% add relulayer
layername_S = "reluLayer_S" + string(i);
lgraph = addLayers(lgraph,reluLayer("Name",layername_S));
lgraph = connectLayers(lgraph,l_prev_S,layername_S);
l_prev_S = layername_S;
end
if numHiddenUnits(2,i)> 0
layername_ET = "layers_ET_hidden" + string(i);
lgraph = addLayers(lgraph,fullyConnectedLayer(numHiddenUnits(2,i),"Name",layername_ET));
lgraph = connectLayers(lgraph,l_prev_ET,layername_ET);
l_prev_ET = layername_ET;
% add relulayer
layername_ET = "reluLayer_ET" + string(i);
lgraph = addLayers(lgraph,reluLayer("Name",layername_ET));
lgraph = connectLayers(lgraph,l_prev_ET,layername_ET);
l_prev_ET = layername_ET;
end
% append dropout if not the last layer
if i < length(numHiddenUnits(1,:))
% add dropoutlayer
layername_S = "dropoutLayer_S" + string(i);
lgraph = addLayers(lgraph,dropoutLayer(dropput_prob,"Name",layername_S));
lgraph = connectLayers(lgraph,l_prev_S,layername_S);
l_prev_S = layername_S;
layername_ET = "dropoutLayer_ET" + string(i);
lgraph = addLayers(lgraph,dropoutLayer(dropput_prob,"Name",layername_ET));
lgraph = connectLayers(lgraph,l_prev_ET,layername_ET);
l_prev_ET = layername_ET;
end
end
concat = concatenationLayer(1,2,'Name','concat');
lgraph = addLayers(lgraph, concat);
lgraph = connectLayers(lgraph, l_prev_S, 'concat/in1');
lgraph = connectLayers(lgraph, l_prev_ET, 'concat/in2');
l_prev = concat.Name;
for i = 1:length(numHiddenUnits(3,:))
if numHiddenUnits(3,i)> 0
layername = "layers_hidden" + string(i);
lgraph = addLayers(lgraph,fullyConnectedLayer(numHiddenUnits(3,i),"Name",layername));
lgraph = connectLayers(lgraph,l_prev,layername);
l_prev = layername;
% add relulayer
layername = "reluLayer" + string(i);
lgraph = addLayers(lgraph,reluLayer("Name",layername));
lgraph = connectLayers(lgraph,l_prev,layername);
l_prev = layername;
end
% append dropout if not the last layer
if i < length(numHiddenUnits(3,:))
% add dropoutlayer
layername = "dropoutLayer" + string(i);
lgraph = addLayers(lgraph,dropoutLayer(dropput_prob,"Name",layername));
lgraph = connectLayers(lgraph,l_prev,layername);
l_prev = layername;
end
end
layername = "outputLayer";
lgraph = addLayers(lgraph,fullyConnectedLayer(numResponses,"Name",layername));
lgraph = connectLayers(lgraph,l_prev,layername);
l_prev = layername;
layername = "regressionLayer";
lgraph = addLayers(lgraph,regressionLayer("Name",layername));
lgraph = connectLayers(lgraph,l_prev,layername);
% visualization of the network
figure
plot(lgraph)
title("FNN architecture")
%% Train
options = trainingOptions('adam', ...
'MaxEpochs',maxEpochs, ...
'InitialLearnRate',initial_LR, ...
'Shuffle','every-epoch', ...
'Plots','training-progress',...
'Verbose',1);
net = trainNetwork(XTrain,YTrain,lgraph,options);
And while running the code in MATLAB R2023a, I am getting the following error:

Can I get some help with figuring out why this error is occurring and what can I do to solve this? Please let me know if any further information is needed. Also, are there any other relevant documentation for training and testing of this type of networks?
Thanks so much for your time and help!
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Deep Learning Toolbox in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
