회귀를위해컨벌루션신경망훈련시키기
이예제에서는컨벌루션신경망을사용하여손으로쓴숫자의회전각도를예측하는회귀모델을피팅하는방법을보여줍니다。
컨벌루션신경망(CNN또는事先)은딥러닝의필수툴로서,특히영상데이터분석에적합합니다。예를들어,cnn을사용하여상을분류할수있습니다。각도나거리와같은연속데이터를예측하려면신경망끝부분에회귀계층을포함시킬수있습니다。
이예제에서는컨벌루션신경망아키텍처를구성하고신경망을훈련시킨다음훈련된신경망을사용하여손으로쓴숫자의회전각도를예측합니다。이러한예측은광학문자식분야에유용합니다。
선택적으로imrotate
(图像处理工具箱™)를사용하여를사용하여상을회전하고箱线图
(统计和机器学习的工具箱™)을사용하여잔차상자플롯을만들수있습니다。
데이터불러오기
데이터세트에는손으로쓴숫자의합성영상과영상각각의회전각도(단위:도)가포함되어있습니다。
digitTrain4DArrayData
와digitTest4DArrayData
를사용하여훈련및검4。출력값YTrain
및YValidation
은회전각도(단위:도)입니다。훈련및검데이터세트는각각5000개의상을포함합니다。
[XTrain,~,YTrain] = digitTrain4DArrayData;[XValidation,~,YValidation] = digitTest4DArrayData;
imshow
를사용하여임의의훈련상20개를시합니다。
numTrainImages =数字(YTrain);figure idx = randperm(numTrainImages,20);为i = 1:元素个数(idx)次要情节(4、5、i) imshow (XTrain (:,:,:, idx(我)))结束
데이터정규화확하기
신경망을훈련시킬때신경망의모든단계에서정규화된데이터를사용하면유용한경우가종종있습니다。정규화는경사하강법을사용하여신경망훈련을안정화하고속도를높이는데도움이됩니다。데이터가제대로스케일링되지않은경우에는손실이南
이되어훈련중에신경망파라미터가발산할수있습니다。데이터를정규화하는일반적인방법에는범위가[0,1]이되도록데이터를다시스케일링하는방법과평균0,표준편차1이되도록다시스케일링하는방법이있습니다。정규화할수있는데이터는다음과같습니다。
입력데이터。예측변수를신경망에입력하기전에먼저정규화합니다。이예제에서는입력이예제에서는입력상이이미범위[0,1]로정규화되어있습니다。
계층출력값。배치정규화계층을사용하여각컨벌루션계층과완전연결계층의출력값을정규화할수있습니다。
응답변수。신경망의끝부분에서배치정규화계층을사용하여계층출력값을정규화하는경우,훈련이시작될때신경망의예측값이정규화됩니다。응답변수의스케일이이러한예측값의스케일과크게다르면신경망훈련이수렴하지못할수있습니다。응답변수가제대로스케일링되지않았다면정규화를수행한다음신경망훈련이개선되는지확인하십시오。훈련을진행하기전에응답변수를정규화한경우에는훈련된신경망의예측값을변환해야만원래응답변수에대한예측값을얻을수있습니다。
응답변수의분포를플로팅합니다。응답변수(도단위의회전각도)는-45와45사이에서대략균등분포되어있으므로정규화할필요가없습니다。분류문제에서는출력값이클래스확률입니다。클래스확률은항상정규화됩니다。
图直方图(YTrain)轴紧ylabel (“计数”)包含(旋转角度的)
이러한데이터는일반적으로정확하게정규화할필가없습니다。그러나이예제의경우YTrain
대신100 * YTrain
이나YTrain + 500
을예측하도록신경망을훈련시키면손실이南
이되어훈련을시작하면신경망파라미터가발산합니다。aY + b를예측하는신경망과Y를예측하는신경망의유일한차이가마지막완전연결계층의가중치와편향을다시스케일링한것뿐임에도불구하고이러한결과가발생합니다。
입력값이나응답변수의분포가매우고르지않거나편중되었다면신경망을훈련시키기전에데이터에대해비선형변환(예:로그적용)을수행할수도있습니다。
신경망계층만들기
회귀문제를풀려면신경망계층을만들고신경망끝부분에회귀계층을포함시키십시오。
첫번째계층은입력데이터의크기와유형을정의합니다。입력상은28×28×1입니다。훈련、상과크기가같은、훈련、상입력계층을만듭니다。
신경망의중간계층은대부분의연산과학습이이루어지는신경망의핵심아키텍처를정의합니다。
마지막계층은출력데이터의크기와유형을정의합니다。회귀문제인경우에는신경망의끝부분에서완전연결계층이회귀계층앞에와야합니다。크기가1 rm완전연결된출력계층을만들고회귀계층을만듭니다。
모든계층을层
배열에서결합합니다。
图层= [imageInputLayer([28 28 1])卷积2dlayer (3,8,“填充”,“相同”(2,)“步”2) convolution2dLayer(16日“填充”,“相同”(2,)“步”32岁的,2)convolution2dLayer (3“填充”,“相同”卷积2dlayer (3,32,“填充”,“相同”) batchNormalizationLayer reluLayer dropoutLayer(0.2) fullyConnectedLayer(1) regressionLayer];
신경망훈련시키기
신경망훈련옵션을만듭니다。훈련을纪元30회수행합니다。초기학습률을0.001로설정하고,Epoch 20회가지나면학습률을떨어뜨립니다。검데이터와검빈도를지정하여훈련중에신경망정확도를모니터링합니다。훈련데이터에대해신경망이훈련되고,훈련중에규칙적인간격으로검증데이터에대한정확도가계산됩니다。검데이터는신경망가중치를업데이트하는데사용되지않습니다。훈련진행상황플롯을켜고명령창출력을끕니다。
miniBatchSize = 128;validationFrequency = floor(编号(YTrain)/miniBatchSize);选项= trainingOptions(“个”,...“MiniBatchSize”miniBatchSize,...“MaxEpochs”30岁的...“InitialLearnRate”1 e - 3,...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”, 0.1,...“LearnRateDropPeriod”, 20岁,...“洗牌”,“every-epoch”,...“ValidationData”{XValidation, YValidation},...“ValidationFrequency”validationFrequency,...“阴谋”,“训练进步”,...“详细”、假);
trainNetwork
를사용하여신경망을만듭니다。이명령은사용가능한경우호환되는gpu를사용합니다。GPU를사용하려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。사용가능하지않은경우trainNetwork
는cpu를사용합니다。
net = trainNetwork(XTrain,YTrain,图层,选项);
网
의层
속성에포함된신경망아키텍처의세부정보를살펴봅니다。
网层
ans = 18x1带有图层的图层数组:1' imageinput'图像输入28x28x1图像,'zerocenter'归一化2' conv_1'二维卷积8个3x3x1卷积,stride[1 1],填充'same' 3 'batchnorm_1'批量归一化8通道批量归一化4 'relu_1' ReLU ReLU 5 'avgpool2d_1'二维平均池化2x2平均池化,stride[2 2],填充[0 0 0 0 0]6 'conv_2'二维卷积16个3x3x8卷积,stride[1 1],填充'same' 7 'batchnorm_2'批量归一化16个批量归一化通道8 'relu_2' ReLU ReLU 9 'avgpool2d_2'二维平均池化2x2平均池化与stride[2 2]和填充[0 0 0 0 0]10 'conv_3'二维卷积32 3x3x16卷积与stride[1 1]和填充'same' 11 'batchnorm_3'批归一化与stride[1 1]和填充'same' 14 'batchnorm_4'批归一化与32通道批归一化15 'relu_4' ReLU ReLU 16'dropout' dropout 20% dropout 17 'fc'全连接1全连接层18 'regressionoutput'回归输出均方误差与响应' response '
신경망테스트하기
검데이터에대한정확도를평가함으로써신경망의성능을테스트합니다。
预测
를사용하여검상의회전각도를예측합니다。
ypredict = predict(net,XValidation);
성능평가하기
다음을계산하여모델의성능을평가합니다。
허용가능한오차범위내에있는예측값의비율
예측된회전각도와실제회전각도사이의rmse(제곱평균제곱근오차)
예측된회전각도와실제회전각도사이의예측오차를계산합니다。
predictionError = YValidation - yexpected;
실제각도로부터허용가능한오차범위내에있는예측값의개수를계산합니다。임계값을10도로설정합니다。이임계값내에있는예측값의비율을계산합니다。
THR = 10;numCorrect = sum(abs(predictionError) < thr);numValidationImages = nummel (YValidation);accuracy = numCorrect/numValidationImages
准确度= 0.9644
RMSE(제곱평균제곱근오차)를사용하여예측된회전각도와실제회전각도사이의차이를측정합니다。
squares = predictionError.^2;Rmse =√(均数(平方))
rmse =单4.6253
예측시각화하기
산점도플롯에서예측을시각화합니다。실제값에대해예측된값을플로팅합니다。
图散射(YPredicted YValidation,“+”)包含(“预测价值”) ylabel (“真正的价值”)举行在Plot ([-60 60], [-60 60],“r——”)
숫자회전정정하기
图像处理工具箱의함수를사용하여숫자를바로세우고함께표시할수있습니다。imrotate
(图像处理工具箱)를사용하여49개의샘플숫자를예측한회전각도에따라회전합니다。
idx = randperm(numValidationImages,49);为i = 1:元素个数(idx)图像= XValidation (:,:,:, idx(我));predictedAngle = yexpected (idx(i));imagesrotate (:,:,:,i) = imrotate(image,predictedAngle,“双三次的”,“作物”);结束
원래숫자와회전을정정한숫자를함께@ @시합니다。蒙太奇
(图像处理工具箱)를사용하여숫자들을영상하나에한꺼번에표시할수있습니다。
图subplot(1,2,1)蒙太奇(XValidation(:,:,:,idx))标题(“原始”) subplot(1,2,2)蒙太奇(imagesrotate)“纠正”)
참고 항목
regressionLayer
|classificationLayer