Error with averagePooling1dLayer (pooling dimension lower than pooling size)

조회 수: 30(최근 30일)
I am currently working on a sequence to label classification problem.
My dataset consists in 600 audio files. I have zero-padded them so that they all have the same length, i.e 62993 time-steps for each audio file.
My issue is that I do not manage to make my 1D CNN working when I try to use maxPooling1dLayer or avgPooling1dLayer.
My CNN is the following :
numFilters = 16;
filterSize = 3;
layers = [ ...
Then I try to start the training using
miniBatchSize = 64;
max_epochs = 10; % Specify how long we should optimize
learning_rate = 10^(-3); % Try different learning rates
options = trainingOptions( 'adam',...
'InitialLearnRate',learning_rate, ...
'Plots', 'training-progress', ...
'ValidationData', {test_audio,test_classes}, ...
'Shuffle','every-epoch', ...
'ValidationFrequency', 10, ...
'miniBatchSize', miniBatchSize,...
'ExecutionEnvironment','gpu', ...
net = trainNetwork(train_audio, train_classes, layers, options);
But I keep having this kind of errors (I do not have them when I remove the pooling layers) :
" Error in script_without_data_aug1DCNN (line 167)
net = trainNetwork(train_audio, train_classes, layers, options);
Caused by:
Layer 5: The size of the pooling dimension of the padded input data must be larger than or equal to the pool 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. "
And I do not know why it is not working as expected. It is supposed to pool along the time dimension so the pooling dimension (60k+) is much higher than the pool size (2)... So I think the issue is inside the sizes of my training variables or the number of features that maybe you can tell me what is wrong.
  • I used numFeatures=1 since I only have audio samples, so one channel.
My files have the following size (I have 453 audio in my training dataset) :
  • train_audio contains my training audio samples, it is 453x1 cell and each cell is a 1x62993 double
  • train_classes contains my training labels, it is a 453x1 categorical
  댓글 수: 1
yanqi liu
yanqi liu 2022년 3월 10일
yes,sir,may be check the dimension through net structure,or may be upload some dataset sample to debug

댓글을 달려면 로그인하십시오.

채택된 답변

Joss Knight
Joss Knight 2022년 3월 9일
The time dimension is variable so just because you happen to be passing a long sequence into the network doesn't mean you're not trying to build a network that can handle a sequence of length 1. Try setting a MinLength on your sequenceInputLayer as suggested by the error message.
  댓글 수: 4
Brian Hemmat
Brian Hemmat 2022년 3월 11일
편집: Brian Hemmat 2022년 3월 11일
Why did you try to set MinLength=5 ? It seems from your description that MinLength=62993.
Which layer is your "hidden" layer?
If you run
you'll see that by the time it gets to classification, you have many time steps. Do you want a classification per time step (I don't think this makes sense with audio data) or a classification per audio file? If you want a single classification per audio file, you will have to collapse the time dimension somehow. Why doesn't the sequenceFoldingLayer work for you?

댓글을 달려면 로그인하십시오.

추가 답변(0개)





Community Treasure Hunt

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

Start Hunting!

Translated by