使用MATLAB训练CNN时如何将图像标准化为[0,1]?

时间:2017-07-23 20:30:21

标签: matlab image-processing machine-learning neural-network deep-learning

我是机器学习的新手,现在正试图在MNIST上培训CNN。

我有60k png训练集的MNIST,但是Layer类,imageinputlayer(),它只能使图像为零中心,并且无法将其标准化。

我该怎么做才能将图像输入缩放到0-1?

我的意思是:当使用 trainNetwork()功能训练CNN时,我想在Class 图层上部署图像规范化图层。

在MATLAB文件中:https://cn.mathworks.com/help/nnet/examples/create-simple-deep-learning-network-for-classification.html

有一个演示代码

    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)。

那么如何在图层结构中添加规范化图层?

还是没有必要对训练集进行标准化?

1 个答案:

答案 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