Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

회귀를컨벌루션신경망훈련시키기

이예제컨벌루션을사용손쓴의의각도를예측예측하는회귀모델을을피팅피팅하는방법을보여보여줍니다줍니다。

컨벌루션 신경망(CNN 또는 ConvNet)은 딥러닝의 필수 툴로서, 특히 영상 데이터 분석에 적합합니다. 예를 들어, CNN을 사용하여 영상을 분류할 수 있습니다. 각도나 거리와 같은 연속 데이터를 예측하려면 신경망 끝부분에 회귀 계층을 포함시킬 수 있습니다.

이예제에서는컨벌루션신경망아키텍처를구성하고신경망을훈련시킨다음훈련된신경망을사용하여 손으로 쓴 숫자의 회전 각도를 예측합니다. 이러한 예측은 광학 문자 인식 분야에 유용합니다.

선택적으로imrotate(Image Processing Toolbox™)를 사용하여 영상을 회전하고boxplot(统计和机器学习工具箱™)을사용잔차플롯을있습니다있습니다。

데이터불러오기

데이터 세트에는 손으로 쓴 숫자의 합성 영상과 영상 각각의 회전 각도(단위: 도)가 포함되어 있습니다.

digitTrain4DArrayDatadigitTest4DArrayData를사용훈련검증을을을을차원차원로불러옵니다옵니다。출력값yTrain录音은 회전 각도(단위: 도)입니다. 훈련 및 검증 데이터 세트는 각각 5,000개의 영상을 포함합니다.

[XTrain,~,YTrain] = digitTrain4DArrayData; [XValidation,~,YValidation] = digitTest4DArrayData;

imshow를 사용하여 임의의 훈련 영상 20개를 표시합니다.

numTrainImages = numel(YTrain); figure idx = randperm(numTrainImages,20);fori = 1:numel(idx)子图(4,5,i)imshow(xtrain(:,::,,:,:,idx(i)))end

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

데이터 정규화 확인하기

신경망을신경망의모든에서정규된를사용하면유용한경우경우종종종종종종。정규화는을하여신경망훈련안정화속도높이는데도움이됩니다됩니다。데이터가스케일링되지않은손실이손실이NaN이되어에파라미터발산발산있습니다있습니다있습니다。데이터를하는인방법에는[0,1]이이데이터데이터를다시스케일링하는하는방법방법과과과평균평균평균평균평균평균평균평균평균평균평균하는하는하는표표표표표표표표표표표표표표표범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위범위표표표표표표표표표표표표표표표표표표표정규화수데이터다음과같습니다같습니다。

  • 입력데이터。예측변수에하기에에합니다합니다합니다。이예제입력영상이미[0,1]로정규되어있습니다。

  • 계층출력값。배치정규사용하여각계층과연결의출력값을정규화화수수수。

  • 응답변수。신경망의에서정규계층을하여출력값정규화정규화하는하는하는경우경우경우경우경우경우경우경우훈련이훈련이훈련이시작시작시작될될때때때신경망의의예측예측예측예측값값값이응답변수이예측값의과크게신경망수렴하지못할수있습니다있습니다。응답변수스케일링않았다면정규화를다음신경망훈련이확인하십시오하십시오하십시오。훈련을전응답변수정규정규에는훈련된신경망의예측값값을변환해야만해야만원래원래응답변수변수에에에대한대한대한예측예측값값을얻을얻을수

응답 변수의 분포를 플로팅합니다. 응답 변수(도 단위의 회전 각도)는 -45와 45 사이에서 대략 균등분포되어 있으므로 정규화할 필요가 없습니다. 분류 문제에서는 출력값이 클래스 확률입니다. 클래스 확률은 항상 정규화됩니다.

图直方图(YTRAIN)轴tightylabel(“计数”)xlabel('Rotation Angle'

图包含一个轴对象。轴对象包含类型直方图的对象。

이러한 데이터는 일반적으로 정확하게 정규화할 필요가 없습니다. 그러나 이 예제의 경우yTrain대신100*YTrain이나Ytrain+500을예측신경망을훈련손실이손실이NaN이 되어 훈련을 시작하면 신경망 파라미터가 발산합니다.aY + b를예측하는신경망과y를 예측하는 신경망의 유일한 차이가 마지막 완전 연결 계층의 가중치와 편향을 다시 스케일링한 것뿐임에도 불구하고 이러한 결과가 발생합니다.

입력값이나 응답 변수의 분포가 매우 고르지 않거나 편중되었다면 신경망을 훈련시키기 전에 데이터에 대해 비선형 변환(예: 로그 적용)을 수행할 수도 있습니다.

신경망 계층 만들기

회귀문제신경망을만들고신경망부분회귀계층포함시키십시오시키십시오시키십시오。

첫 번째 계층은 입력 데이터의 크기와 유형을 정의합니다. 입력 영상은 28×28×1입니다. 훈련 영상과 크기가 같은 영상 입력 계층을 만듭니다.

신경망의은의연산과학습신경망의핵심정의합니다합니다합니다。

마지막계층데이터크기유형유형합니다합니다합니다。회귀문제에는의끝부분완전연결이계층앞에와야합니다합니다。1인인된계층을회귀계층만듭니다만듭니다만듭니다만듭니다만듭니다。

모든 계층을Layer배열에서합니다。

layers = [ imageInputLayer([28 28 1]) convolution2dLayer(3,8,'Padding',,,,'same')batchNormalizationLayer reluLayer averagePooling2dLayer(2,“大步”,,,,2) convolution2dLayer(3,16,'Padding',,,,'same')batchNormalizationLayer reluLayer averagePooling2dLayer(2,“大步”,,,,2) convolution2dLayer(3,32,'Padding',,,,'same')batchNormalizationLayer reluLayer convolution2dLayer(3,32,'Padding',,,,'same')batchNormalizationLayer reluLayer dropoutLayer(0.2) fullyConnectedLayer(1) regressionLayer];

신경망 훈련시키기

신경망훈련만듭니다。훈련을时期30회합니다합니다。초기학습률학습률을0.001로하고하고,时代20회가학습률떨어뜨립니다떨어뜨립니다떨어뜨립니다。검증데이터빈도지정하여중에정확도를합니다합니다합니다。훈련데이터신경망이되고되고되고되고중규칙인간격검증데이터에에대한정확도정확도계산됩니다됩니다됩니다검증데이터가중치업데이트데데않습니다않습니다않습니다。훈련진행켜고명령출력끕니다끕니다끕니다。

miniBatchSize = 128; validationFrequency = floor(numel(YTrain)/miniBatchSize); options = trainingOptions('sgdm',,,,...'MiniBatchSize',,,,miniBatchSize,...“ maxepochs”,,,,30,...'InitialLearnRate',1E-3,...'LearnRateSchedule',,,,“分段”,,,,...'LearnRateDropFactor',0.1,...'LearnRatedRopperiod',20,...'Shuffle',,,,'every-epoch',,,,...'ValidationData',,,,{XValidation,YValidation},...'ValidationFrequency',,,,validationFrequency,...“绘图”,,,,“训练过程”,,,,...'Verbose',,,,false);

trainNetwork를사용신경망만듭니다만듭니다。이명령가능한경우되는되는되는사용사용사용합니다합니다。gpu를하려면하려면平行计算工具箱™와지원되는되는장치가장치가합니다합니다。지원되는에대한자세한은은릴리스별 GPU 지원(并行计算工具箱)항목을하십시오。사용가능하지경우trainNetwork는 CPU를 사용합니다.

网= trainNetwork (XTrain、YTrain层,选择);

Figure Training Progress (18-Jul-2021 12:33:49) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 10 objects of type patch, text, line. Axes object 2 contains 10 objects of type patch, text, line.

net속성에 포함된 신경망 아키텍처의 세부 정보를 살펴봅니다.

net.Layers
ans = 18x1层阵列带有图层:1'imageInput'图像输入28x28x1图像,带有“ zerecenter”归一化2'cons_1'卷积8 3x3x1卷积与步幅[1 1]和padding'same'same'3'BatchNorm_1'BatchNorm_1'Batch batch rathatization j batch标准化与8频道4“ relu_1” relu 5'avgpool2d_1'平均合并2x2平均池,步幅[2 2]和填充[0 0 0 0] 6'conv_2'卷积16 3x3x8卷积与步幅[1 1]和填充'Same'7 7'batchnorm_2'批量归一化批准归一化,16个通道8'relu_2'relu 9'avgpool2d_2'平均池2x2平均平均池,稳定[2 2]和填充[2 2]和填充[0 0 0] 10'conv_3'卷积32 32 3x3x16 sTride [1 1]和填充“相同” 11'batchnorm_3'批量归一化批准化批准归一化,32个通道12'relu_3'relu relu 13'conv_4'卷积32 3x3x32卷积,步幅[1 1]和填充'相同''14'14'batchnorm_4'batchnorm_4'Batch Normizatization32个频道15'relu_4'relu r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r rELU 16“辍学”辍学20%辍学17'fc'完全连接1完全连接的第18层“回归输出”回归输出均值eRNOR,带有响应'响应'

신경망테스트하기

검증데이터정확도평가함으로써의을테스트합니다합니다。

predict를사용영상회전각도예측합니다합니다。

yPredicted = predict(net,XValidation);

성능 평가하기

다음을 계산하여 모델의 성능을 평가합니다.

  1. 허용가능오차내에예측값의비율

  2. 예측된 회전 각도와 실제 회전 각도 사이의 RMSE(제곱평균제곱근 오차)

예측된와회전각도사이예측를계산합니다합니다。

predictionError = YValidation - YPredicted;

실제 각도로부터 허용 가능한 오차 범위 내에 있는 예측값의 개수를 계산합니다. 임계값을 10도로 설정합니다. 이 임계값 내에 있는 예측값의 비율을 계산합니다.

thr = 10;numCorrect = sum(abs(predictionError)
               
精度= 0.9672

RMSE(제곱평균제곱근 오차)를 사용하여 예측된 회전 각도와 실제 회전 각도 사이의 차이를 측정합니다.

squares = predictionError.^2; rmse = sqrt(mean(squares))
rmse =单身的4.6507

예측 시각화하기

산점도에서을화합니다합니다。실제값예측된을합니다합니다합니다。

图散射(质量,validation,yvalidation,'+')xlabel(“预测价值”)ylabel("True Value")holdon图([ -  60 60],[-60 60],'r--'

图包含一个轴对象。轴对象包含2个类型散点的对象。

숫자회전정정하기

Image Processing Toolbox의 함수를 사용하여 숫자를 바로 세우고 함께 표시할 수 있습니다.imrotate(图像处理工具箱)를를하여하여개의예측회전각도에합니다합니다합니다합니다합니다합니다。

idx = randperm(numValidationImages,49);fori = 1:numel(idx) image = XValidation(:,:,:,idx(i)); predictedAngle = YPredicted(idx(i)); imagesRotated(:,:,:,i) = imrotate(image,predictedAngle,'bicubic',,,,'crop');end

원래 숫자와 회전을 정정한 숫자를 함께 표시합니다.剪辑(图像处理工具箱)를사용하여영상에에표시있습니다있습니다있습니다。

figure subplot(1,2,1) montage(XValidation(:,:,:,idx)) title('Original')subplot(1,2,2) montage(imagesRotated) title('Corrected'

Figure contains 2 axes objects. Axes object 1 with title Original contains an object of type image. Axes object 2 with title Corrected contains an object of type image.

참고 항목

|

관련 항목