我的数据集由 1000 个 100x40 大小的 RGB 图像组成。因此,Xdata = 1x1x1000
数据类型为 double。
其中我使用了前 700 个进行训练,数据类型为 Image 的 Xtrain = 1x1x700
。
我收到此错误
Error using trainNetwork (line 150)
Invalid training data. X must be a 4-D array of images, an ImageDatastore, or a table.
我不明白如何使用表数据结构以及将数据输入 CNN 的正确方法是什么?无法直接输入 RGB 图像作为图像数据类型,还是需要转换每个 channel 并输入 3 个 2 D 矩阵?
imageSize = [100 40];
dropoutProb = 0.1;
numF = 8;
layers = [
imageInputLayer(imageSize)
convolution2dLayer(3,numF,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(3,'Stride',2,'Padding','same')
convolution2dLayer(3,2*numF,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(3,'Stride',2,'Padding','same')
convolution2dLayer(3,4*numF,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(3,'Stride',2,'Padding','same')
convolution2dLayer(3,4*numF,'Padding','same')
batchNormalizationLayer
reluLayer
convolution2dLayer(3,4*numF,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer([1 13])
dropoutLayer(dropoutProb)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
miniBatchSize = 50;
validationFrequency = floor(numel(Ytrain)/miniBatchSize);
options = trainingOptions('adam', ...
'InitialLearnRate',3e-4, ...
'MaxEpochs',25, ...
'MiniBatchSize',miniBatchSize, ...
'Shuffle','every-epoch', ...
'Plots','training-progress', ...
'Verbose',false, ...
'ValidationData',{XValidation,YValidation}, ...
'ValidationFrequency',validationFrequency, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.1, ...
'LearnRateDropPeriod',20);
trainedNet = trainNetwork(Xtrain,layers,options);
最佳答案
输入的尺寸错误。 4D 数组的形状应为:
[height, width, number_of_channels, number of images]
因此,在您的情况下,您需要火车图像尺寸为:
[100, 40, 3, 700]
并测试图像尺寸为:
[100, 40, 3, 300]
在最后一个全连接层之前还有一个 dropout 层,在它之前是否应该有一个额外的全连接层?现在您将丢弃最大池化结果,这是可以做到的,但相当激进。
如果您不特别想使用 4 维数据存储,trainNetwork() 还可以接受其他输入。我更喜欢augmented image datastore由 image data store 制成,这是增强图像的一种非常简单的方法,如果您还没有这样做,那么您绝对应该这样做。如果没有,请考虑将图像数据类型从 double 更改为 uint8,3 个 uint8 channel 足以完全表示典型的输入图像,并且它应该会加快您的训练速度。
关于matlab - 如何在神经网络Matlab中将训练数据制作为4D数组 - 输入数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527210/