数据可以是ImageDatastore类型,也可以是4-D数组,四个维度分别是长度,宽度,通道数,第几个图片。
输入层 imageInputLayer([imsize imsize 1])
卷积层1 convolution2dLayer(5,150)
激活函数层1 reluLayer()
标准化层 crossChannelNormalizationLayer(5,‘Alpha’,0.00005,‘Beta’,0.75,‘K’,1)
卷积层2 convolution2dLayer(3,300,‘Stride’,1,‘BiasLearnRateFactor’,2)
激活函数层2 reluLayer()
连接层 fullyConnectedLayer(1)
去最大值层 softmaxLayer()
分类层 classificationLayer()
回归网络最后一层必须是regressionLayer(),倒数第二层为全连接层。
对于回归网络,绘制根均方误差 (rmse) 而不是精度。
%数据参数
[height,width,numChannels,~] = size(trainingImages);
imageSize = [height width numChannels];
numClasses = 10;
%结构
%输入层
inputLayer = imageInputLayer(imageSize);
%中间层
filterSize = [3 3];
numFilters = 32;
middleLayers = [
convolution2dLayer(filterSize,numFilters,'Padding',1)
reluLayer()
crossChannelNormalizationLayer(5,'Alpha',0.00005,'Beta',0.75,'K',1)
convolution2dLayer(filterSize,numFilters,'Padding',1)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
];
%输出层
finalLayers = [
fullyConnectedLayer(64)
reluLayer()
fullyConnectedLayer(numClasses)
softmaxLayer()
classificationLayer()
];
%各层合并
layers = [
inputLayer
middleLayers
finalLayers
];
%参数
options = trainingOptions('sgdm', ...
'Momentum',0.8, ...
'InitialLearnRate',0.001, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.2, ...
'LearnRateDropPeriod',8, ...
'L2Regularization',0.001, ...
'MaxEpochs',40, ...
'MiniBatchSize',128, ...
'Verbose',true, ...
'Plots','training-progress');
%训练
net = trainNetwork(trainingImages,trainingLabels,layers,options);
%测试
YTest = classify(net,testImages);
%准确率
accuracy = sum(YTest == testLabels)/numel(testLabels)