Main Content

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

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

이 예제에서는 딥러닝 신경망의 훈련 진행 상황을 모니터링하는 방법을 보여줍니다.

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

이 예제에서는 trainNetwork 함수를 사용하여 훈련된 신경망의 훈련 진행 상황을 모니터링하는 방법을 보여줍니다. 사용자 지정 훈련 루프를 사용하여 훈련된 신경망의 경우 trainingProgressMonitor 객체를 사용하여 훈련 중에 메트릭을 플로팅합니다. 자세한 내용은 Monitor Custom Training Loop Progress 항목을 참조하십시오.

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

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

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

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

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

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

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

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

훈련이 끝나면 결과에서 완료된 검증 정확도와 훈련이 끝난 이유를 확인합니다. OutputNetwork 훈련 옵션이 "last-iteration"(디폴트 값)이면 완료된 메트릭은 마지막 훈련 반복에 대응됩니다. OutputNetwork 훈련 옵션이 "best-validation-loss"이면 완료된 메트릭은 검증 손실이 가장 낮은 반복에 대응됩니다. 최종 검증 메트릭이 계산된 반복은 플롯에 최종이라고 표시됩니다.

신경망에 배치 정규화 계층이 포함되어 있는 경우, 최종 검증 메트릭이 훈련 중에 계산된 검증 메트릭과 다를 수 있습니다. 이는 훈련이 완료된 후 배치 정규화에 사용되는 평균 통계량 및 분산 통계량이 다를 수 있기 때문입니다. 예를 들어 BatchNormalizationStatisics 훈련 옵션이 "population"인 경우 훈련 후에 소프트웨어는 훈련 데이터를 한 번 더 통과시켜 배치 정규화 통계량을 완성하고 결과로 생성되는 평균과 분산을 사용합니다. BatchNormalizationStatisics 훈련 옵션이 "moving"인 경우 소프트웨어는 동적 추정값을 사용하여 훈련 중에 통계량을 근사하고 통계량의 최신 값을 사용합니다.

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

훈련 진행 상황 플롯을 저장하려면 훈련 창에서 훈련 플롯 내보내기를 클릭하십시오. 플롯은 PNG, JPEG, TIFF 또는 PDF 파일로 저장할 수 있습니다. 좌표축 도구 모음을 사용하여 손실, 정확도, 평균 제곱 오차 제곱근의 개별 플롯을 저장할 수도 있습니다.

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

신경망을 훈련시키고 훈련 중에 훈련 진행 상황을 플로팅합니다.

숫자 영상 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 값을 선택합니다. 훈련 중에 훈련 진행 상황을 플로팅하려면 Plots 훈련 옵션을 "training-progress"로 설정하십시오.

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

신경망을 훈련시킵니다.

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

Figure Training Progress (30-Jan-2023 12:55:01) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

참고 항목

|

관련 항목