이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

심층 학습 훈련 진행 상황 모니터링하기

심층 학습을 위해 네트워크를 훈련시킬 때는 훈련 진행 상황을 모니터링하는 것이 유용한 경우가 종종 있습니다. 훈련 중에 다양한 메트릭을 플로팅하면 훈련이 어떻게 진행되고 있는지 알 수 있습니다. 예를 들어, 네트워크 정확도가 향상되고 있는지, 향상되는 속도는 어느 정도인지, 네트워크가 훈련 데이터를 과적합하기 시작하고 있는지 등을 확인할 수 있습니다.

trainingOptions에서 'training-progress''Plots' 값으로 지정하고 네트워크 훈련을 시작하면 trainNetwork는 Figure를 만들고 각 반복에서 훈련 메트릭을 표시합니다. 각 반복은 기울기의 추정값이자 네트워크 파라미터의 업데이트입니다. trainingOptions에 검증 데이터를 지정하면 trainNetwork가 네트워크를 검증할 때마다 Figure에 검증 메트릭이 표시됩니다. Figure에는 다음과 같은 내용이 플로팅됩니다.

  • 훈련 정확도 — 각 개별 미니 배치의 분류 정확도.

  • 스무딩된 훈련 정확도 — 훈련 정확도에 스무딩 알고리즘을 적용하여 얻은 스무딩된 훈련 정확도. 스무딩되지 않은 정확도보다 잡음이 적기 때문에 보다 쉽게 추세를 파악할 수 있습니다.

  • 검증 정확도 — 전체 검증 세트에 대한 분류 정확도(trainingOptions를 사용하여 지정됨).

  • 훈련 손실, 스무딩된 훈련 손실검증 손실 각 미니 배치에 대한 손실, 각 미니 배치에 대한 스무딩된 손실, 검증 세트에 대한 손실. 네트워크의 마지막 계층이 classificationLayer이면 손실 함수는 교차 엔트로피 손실이 됩니다. 분류 및 회귀 문제의 손실 함수에 대한 자세한 내용은 출력 계층 항목을 참조하십시오.

회귀 네트워크에서는 Figure가 정확도 대신 RMSE(평균 제곱 오차의 제곱근)를 플로팅합니다.

Figure는 훈련되는 각 Epoch를 음영 처리된 배경으로 표시합니다. Epoch 1회는 전체 데이터 세트를 완전히 한 번 통과하는 것을 의미합니다.

훈련 중에 오른쪽 위 코너에 있는 중지 버튼을 클릭하면 훈련을 중지하고 네트워크의 현재 상태를 반환할 수 있습니다. 예를 들어, 네트워크의 정확도가 일정해지고 더 이상 증가하지 않는 것이 분명해지면 훈련을 중지하려 할 수 있습니다. 중지 버튼을 클릭하면 훈련이 완료되기까지 얼마간의 시간이 걸릴 수 있습니다. 훈련이 완료되면 trainNetwork는 훈련된 네트워크를 반환합니다.

훈련이 끝나면 결과에서 최종 검증 정확도와 훈련이 끝난 이유를 확인합니다. 최종 검증 메트릭은 플롯에서 최종이라고 표시됩니다. 네트워크에 배치 정규화 계층이 포함되어 있는 경우, 최종 검증 메트릭이 훈련 중에 계산된 검증 메트릭과 다른 경우가 종종 있습니다. 최종 네트워크의 배치 정규화 계층은 훈련 중일 때와 다른 연산을 수행하기 때문입니다.

오른쪽에서 훈련 시간과 설정에 대한 정보를 확인합니다. 훈련 옵션에 대한 자세한 내용은 파라미터를 설정하고 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

훈련 중에 훈련 진행 상황 플로팅하기

네트워크를 훈련시키고 훈련 중에 훈련 진행 상황을 플로팅합니다.

숫자 이미지 5,000개를 포함하는 훈련 데이터를 불러옵니다. 네트워크 검증을 위해 이미지 1,000개를 따로 빼 둡니다.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

숫자 이미지 데이터를 분류할 네트워크를 구성합니다.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

네트워크 훈련 옵션을 지정합니다. 훈련 중에 규칙적인 간격으로 네트워크를 검증하려면 검증 데이터를 지정하십시오. Epoch당 한 번 정도씩 네트워크 검증이 실시되도록 'ValidationFrequency' 값을 선택합니다. 훈련 중에 훈련 진행 상황을 플로팅하려면 'training-progress''Plots' 값으로 지정하십시오.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

네트워크를 훈련시킵니다.

net = trainNetwork(XTrain,YTrain,layers,options);

참고 항목

|

관련 항목