gpt4 book ai didi

matlab - 如何在神经网络Matlab中将训练数据制作为4D数组 - 输入数据的正确方法

转载 作者:行者123 更新时间:2023-11-30 09:32:36 24 4
gpt4 key购买 nike

我的数据集由 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 datastoreimage data store 制成,这是增强图像的一种非常简单的方法,如果您还没有这样做,那么您绝对应该这样做。如果没有,请考虑将图像数据类型从 double 更改为 uint8,3 个 uint8 channel 足以完全表示典型的输入图像,并且它应该会加快您的训练速度。

关于matlab - 如何在神经网络Matlab中将训练数据制作为4D数组 - 输入数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com