딥러닝 훈련 진행 상황 모니터링하기

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

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

참고 항목

|

관련 항목