我是机器学习的新手,现在正试图在MNIST上培训CNN。
我有60k png训练集的MNIST,但是Layer类,imageinputlayer(),它只能使图像为零中心,并且无法将其标准化。
我该怎么做才能将图像输入缩放到0-1?
我的意思是:当使用 trainNetwork()功能训练CNN时,我想在Class 图层上部署图像规范化图层。
有一个演示代码
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
'nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true,'LabelSource','foldernames');
[trainDigitData,testDigitData] = splitEachLabel(digitData, ...
trainingNumFiles,'randomize');
layers = [imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer()];
options = trainingOptions('sgdm','MaxEpochs',15, ...
'InitialLearnRate',0.0001);
convnet = trainNetwork(trainDigitData,layers,options);
众所周知,png图像数据是从0到255的int类型。
但同时,cnn深度学习的输入需要归一化为[0-1]
类imageInputLayer()上的规范化选项,仅为零中心(数据/数据均值),没有缩放归一化选项(data / 255)。
那么如何在图层结构中添加规范化图层?
还是没有必要对训练集进行标准化?
答案 0 :(得分:0)
也许你的意思是这个?这是我预处理imdb
数据的方式,它适用于我的图像。数据存储为(dim1,dim2,sample_size)格式
imdb.images.data = (imdb.images.data-min(imdb.images.data(:)))/(max(imdb.images.data(:)-min(imdb.images.data(:))));
imageMean = mean(imdb.images.data,3);
for j= 1:size(imdb.images.data,3)
imdb.images.data(:,:,j) = imdb.images.data(:,:,j) - imageMean ;
end