LSTM-CNN "The size of the convolution dimension of the padded input data must be larger than or equal to the filter size"

23 次查看(过去 30 天)
Hello everyone,
I am trying to implement LSTM-CNN for speech recognition, I have a matrix for train and test which already are converted it to cell, when I excuted the code I got the error below:
net = trainNetwork(AllCellTrain, YCA, layers, options);
Caused by:
Layer 3: The size of the convolution dimension of the padded input data must be larger than or equal to the filter
size. For networks with sequence input, this check depends on the MinLength property of the sequence input layer. To
ensure that this check is accurate, set MinLength to the shortest sequence length of your training data.
The code that I have used:
% Define LSTM-CNN model architecture
numHiddenUnits = 100; % Number of hidden units in the LSTM layer
numFilters = 100; % Number of filters in the CNN layer
%filterSize = [3, 3]; % Size of the filters in the CNN layer
filterSize=3;
num_features = 39;
layers = [
sequenceInputLayer(num_features)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
convolution1dLayer(filterSize, numFilters)
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(num_classes)
softmaxLayer
classificationLayer
];
% Specify the training options
max_epochs = 26;
mini_batch_size = 128;
initial_learning_rate = 0.001;
options = trainingOptions('adam', ...
'MaxEpochs', max_epochs, ...
'MiniBatchSize', mini_batch_size, ...
'InitialLearnRate', initial_learning_rate, ...
'GradientThreshold', 1, ...
'Shuffle', 'every-epoch', ...
'Verbose', 1, ...
'ExecutionEnvironment','auto', ...
'Plots', 'training-progress');
% Train the LSTM-CNN model
YCA = categorical(CA);
net = trainNetwork(AllCellTrain, YCA, layers, options);
Thanks in advance!

回答(1 个)

Meet
Meet 2024-9-16
Hi Hamza,
The “convolution1dLayer” is intended for 1D sequence data, but it might alter the feature dimension or sequence length depending on the filter size and padding settings.
The pooling operation also reduces the sequence length, which can cause incompatibility with layers expecting a specific input size.
Instead, you could use this configuration as shown below:
layers = [
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits, 'OutputMode', 'last') % Changed to 'last' to output a single time step
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer
];
The above configuration works because it avoids sequence length alterations by directly using the final output of the LSTM layer.
You can refer to the resources below for more information:

类别

Help CenterFile Exchange 中查找有关 Sequence and Numeric Feature Data Workflows 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by