Main Content

딥러닝 팁과 요령

이 페이지에서는 딥러닝 신경망의 정확도를 높이는 여러 훈련 옵션과 기법에 대해 설명합니다. 신경망 훈련 속도를 높이는 방법에 대한 자세한 내용은 Speed Up Deep Neural Network Training 항목을 참조하십시오.

신경망 아키텍처 선택하기

작업과 가용 데이터에 따라 적합한 신경망 아키텍처가 달라집니다. 어느 아키텍처를 사용할 것인지, 그리고 사전 훈련된 신경망을 사용할 것인지 아니면 처음부터 훈련시킬 것인지 정할 때는 다음 제안 사항을 참고하십시오.

데이터작업 설명자세히 알아보기
영상자연 영상의 분류

여러 사전 훈련된 신경망을 사용해 봅니다. 사전 훈련된 딥러닝 신경망 목록은 사전 훈련된 심층 신경망 항목을 참조합시오.

심층 신경망 디자이너를 사용한 전이 학습을 위해 신경망을 대화형 방식으로 준비하는 방법을 알아보려면 심층 신경망 디자이너를 사용하는 전이 학습을 위해 신경망 준비하기 항목을 참조하십시오.

자연 영상의 회귀여러 사전 훈련된 신경망을 사용해 봅니다. 사전 훈련된 분류 신경망을 회귀 신경망으로 변환하는 방법을 보여주는 예제는 분류 신경망을 회귀 신경망으로 변환하기 항목을 참조하십시오.
가공 영상(예: 작은 영상과 스펙트로그램)의 분류 및 회귀

작은 영상을 분류하는 방법을 보여주는 예제는 영상 분류를 위해 잔차 신경망 훈련시키기 항목을 참조하십시오.

스펙트로그램을 분류하는 방법을 보여주는 예제는 딥러닝을 사용해 음성 명령 인식 모델 훈련시키기 항목을 참조하십시오.

의미론적 분할Computer Vision Toolbox™가 의미론적 분할용 딥러닝 신경망을 만드는 툴을 제공합니다. 자세한 내용은 딥러닝을 사용한 의미론적 분할 시작하기 (Computer Vision Toolbox) 항목을 참조하십시오.
시퀀스, 시계열 및 신호sequence-to-label 분류예제는 딥러닝을 사용한 시퀀스 분류 항목을 참조하십시오.
sequence-to-sequence 분류 및 회귀자세한 내용은 딥러닝을 사용한 sequence-to-sequence 분류 항목과 딥러닝을 사용한 sequence-to-sequence 회귀 항목을 참조하십시오.
sequence-to-one 회귀예제는 딥러닝을 사용한 sequence-to-one 회귀 항목을 참조하십시오.
시계열 전망예제는 딥러닝을 사용한 시계열 전망 항목을 참조하십시오.
텍스트분류 및 회귀Text Analytics Toolbox™가 텍스트 데이터용 딥러닝 신경망을 만드는 툴을 제공합니다. 예제는 딥러닝을 사용하여 텍스트 데이터 분류하기 항목을 참조하십시오.
텍스트 생성예제는 딥러닝을 사용하여 텍스트 생성하기 항목을 참조하십시오.
오디오오디오 분류 및 회귀

여러 사전 훈련된 신경망을 사용해 봅니다. 사전 훈련된 딥러닝 신경망 목록은 Pretrained Models (Audio Toolbox) 항목을 참조합시오.

전이 학습을 위해 신경망을 프로그래밍 방식으로 준비하는 방법을 알아보려면 Transfer Learning with Pretrained Audio Networks (Audio Toolbox) 항목을 참조하십시오. 심층 신경망 디자이너를 사용한 전이 학습을 위해 신경망을 대화형 방식으로 준비하는 방법을 알아보려면 Adapt Pretrained Audio Network for New Data Using Deep Network Designer 항목을 참조하십시오.

딥러닝을 사용하여 사운드를 분류하는 방법을 보여주는 예제는 Classify Sound Using Deep Learning (Audio Toolbox) 항목을 참조하십시오.

훈련 옵션 선택하기

trainingOptions 함수는 딥러닝 신경망 훈련을 위한 다양한 옵션을 제공합니다.

추가 정보
훈련 진행 상황 모니터링하기훈련 진행 상황 플롯을 켜려면 Plots 훈련 옵션을 "training-progress"로 설정하십시오.
검증 데이터 사용하기

검증 데이터를 지정하려면 ValidationData 훈련 옵션을 사용하십시오.

참고

검증 데이터 세트가 너무 작아서 데이터를 충분히 나타내지 않는다면 보고된 메트릭이 도움이 되지 않을 수 있습니다. 너무 큰 검증 데이터 세트를 사용하면 훈련 속도가 느려질 수 있습니다.

전이 학습의 경우, 새로운 계층은 학습 속도를 높이고 전이된 계층은 학습 속도를 늦추기

예를 들어, convolution2dLayerWeightLearnRateFactor 속성을 사용하여 새로운 계층의 학습률 인자를 더 높게 지정합니다.

InitialLearnRate 훈련 옵션을 사용하여 초기 학습률을 줄입니다.

전이 학습에서는 그렇게 많은 Epoch 횟수만큼 훈련하지 않아도 됩니다. Epoch 횟수는 MaxEpochs 훈련 옵션을 사용하여 줄입니다.

심층 신경망 디자이너를 사용한 전이 학습을 위해 신경망을 대화형 방식으로 준비하는 방법을 알아보려면 심층 신경망 디자이너를 사용하는 전이 학습을 위해 신경망 준비하기 항목을 참조하십시오.

매 Epoch마다 데이터 섞기

매 Epoch(데이터를 한번 완전히 통과한 것)마다 데이터를 섞으려면 Shuffle 훈련 옵션을 "every-epoch"로 설정하십시오.

참고

시퀀스 데이터의 경우, 섞기로 인해 채워진 데이터 또는 잘린 데이터의 양이 늘어날 수 있으므로 섞기가 정확도에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 사용하는 경우에는 시퀀스 길이를 기준으로 데이터를 정렬하는 것이 도움이 될 수 있습니다. 자세한 내용은 시퀀스 채우기와 줄이기 항목을 참조하십시오.

여러 최적화 함수 사용해 보기

여러 최적화 함수를 지정하려면 trainingOptions 함수의 solverName 인수를 사용하십시오.

훈련 정확도 높이기

훈련 중에 문제가 발생한 경우 다음과 같은 가능한 해결 방법을 참고하십시오.

문제가능한 해결 방법
NaN 또는 손실의 큰 스파이크

InitialLearnRate 훈련 옵션을 사용하여 초기 학습률을 줄입니다.

학습률을 줄여도 도움이 되지 않는다면 기울기 제한을 사용해 봅니다. 기울기 임계값을 설정하려면 GradientThreshold 훈련 옵션을 사용하십시오.

훈련 종료 시점에도 손실이 계속 줄어듦MaxEpochs 훈련 옵션을 사용하여 Epoch 횟수를 늘려 훈련을 더 오래 시킵니다.
손실 일정화

예기치 않게 높은 값에서 손실이 일정화된 경우에는 일정화된 지점에서 학습률을 낮춥니다. 학습률 조정 계획을 변경하려면 LearnRateSchedule 훈련 옵션을 사용하십시오.

학습률을 줄여도 도움이 되지 않는다면 모델이 과소적합된 것일 수 있습니다. 파라미터 또는 계층 개수를 늘려 보십시오. 검증 손실을 모니터링하여 모델이 과소적합된 것인지 여부를 확인할 수 있습니다.

검증 손실이 훈련 손실보다 훨씬 높음

과적합을 방지하려면 다음 중 하나 이상을 시도해 보십시오.

  • 데이터 증대를 사용합니다. 자세한 내용은 augmentedImageDatastore 항목을 참조하십시오.

  • 드롭아웃 계층을 사용합니다. 자세한 내용은 dropoutLayer를 참조하십시오.

  • L2Regularization 훈련 옵션을 사용하여 전역 L2 정규화 인자를 늘립니다.

손실이 매우 천천히 줄어듦

InitialLearnRate 훈련 옵션을 사용하여 초기 학습률을 늘립니다.

영상 데이터의 경우, 신경망에 배치 정규화 계층을 추가해 봅니다. 자세한 내용은 batchNormalizationLayer 항목을 참조하십시오.

훈련의 오류 수정하기

신경망이 전혀 훈련되지 않는 경우 다음과 같은 가능한 해결 방법을 고려하십시오.

오류설명가능한 해결 방법
훈련 중 메모리 부족 오류사용 가능한 하드웨어로는 현재 미니 배치, 신경망 가중치 및 계산된 활성화를 저장할 수 없습니다.

MiniBatchSize 훈련 옵션을 사용하여 미니 배치 크기를 줄여 봅니다.

미니 배치 크기를 줄이는 것으로 오류가 해결되지 않는다면 더 작은 신경망을 사용해 보거나 계층 개수를 줄여 보거나 계층의 파라미터 또는 필터 개수를 줄여 봅니다.

사용자 지정 계층 오류사용자 지정 계층의 구현에 문제가 있을 수 있습니다.

checkLayer를 사용하여 사용자 지정 계층의 유효성을 확인하고 잠재적인 문제를 찾아봅니다.

checkLayer를 사용했을 때 실패하는 테스트가 있다면 이 함수는 테스트 진단과 프레임워크 진단을 제공합니다. 테스트 진단은 계층 문제를 보여주고, 프레임워크 진단은 보다 상세한 정보를 제공합니다. 테스트 진단에 대해 자세히 알아보고 가능한 해결 방법을 위한 제안 사항을 보려면 Diagnostics 항목을 참조하십시오.

훈련이 'CUDA_ERROR_UNKNOWN' 오류를 발생시킴GPU가 OS의 계산 요청과 표시 요청 모두를 위해 사용될 때 이 오류를 발생시키는 경우가 있습니다.

trainingOptionsMiniBatchSize 옵션을 사용하여 미니 배치 크기를 줄여 봅니다.

미니 배치 크기를 줄이는 것으로 오류가 해결되지 않는다면 Windows®에서 TDR(제한 시간 탐지 및 복구) 설정을 조정해 봅니다. 예를 들어, TdrDelay를 2초(디폴트 값)에서 4초로 변경합니다(레지스트리 편집 필요).

analyzeNetwork를 사용하여 딥러닝 신경망을 분석할 수 있습니다. analyzeNetwork 함수는 신경망 아키텍처를 대화형 방식으로 표시하고, 신경망의 오류와 문제를 검출하고, 신경망 계층에 대한 상세한 정보를 제공합니다. 신경망 분석기를 사용해서 신경망 아키텍처를 시각화하여 이해하고, 아키텍처를 올바르게 정의했는지 확인하고, 훈련 전에 문제를 파악합니다. analyzeNetwork에서 검출하는 문제에는 계층이 누락되었거나 연결이 끊긴 경우, 계층 입력 크기가 일치하지 않거나 올바르지 않은 경우, 계층 입력 개수가 올바르지 않은 경우, 신경망 구조가 유효하지 않은 경우 등이 포함됩니다.

데이터 준비하고 전처리하기

데이터를 전처리하여 정확도를 높일 수 있습니다.

클래스에 가중치 적용 또는 균형 맞추기

이상적인 경우라면 모든 클래스가 동일한 개수의 관측값을 갖습니다. 그러나 일부 작업의 경우 클래스의 균형이 맞지 않을 수 있습니다. 예를 들어, 거리 장면으로 구성된 자동차 데이터셋에서는 하늘과 건물, 도로가 영상에서 더 많은 영역을 차지하기 때문에 보행자, 자전거 운전자의 픽셀보다 하늘, 건물, 도로의 픽셀이 더 많습니다. 이러한 불균형을 올바르게 처리하지 않으면 비중이 더 큰 클래스로 인해 학습에 편향이 발생하여 학습을 저해할 수 있습니다.

분류 작업의 경우, trainnet 함수 내부에 사용자 지정 손실 함수를 사용하여 클래스 가중치를 지정할 수 있습니다. 예제는 Train Sequence Classification Network Using Data With Imbalanced Classes 항목을 참조하십시오.

또는 다음 중 하나 이상을 수행하여 클래스의 균형을 맞출 수 있습니다.

  • 가장 빈도가 낮은 클래스의 새로운 관측값을 추가합니다.

  • 가장 빈도가 높은 클래스의 관측값을 제거합니다.

  • 비슷한 클래스를 그룹화합니다. 예를 들어, "자동차" 클래스와 "트럭" 클래스를 단일 클래스 "차량"으로 그룹화합니다.

영상 데이터 전처리하기

영상 데이터 전처리에 대한 자세한 내용은 딥러닝을 위해 영상 전처리하기 항목을 참조하십시오.

작업추가 정보
영상 크기 조정하기

사전 훈련된 신경망을 사용하려면 영상의 크기를 신경망의 입력 크기로 조정해야 합니다. 영상의 크기를 조정하려면 augmentedImageDatastore를 사용하십시오. 예를 들어, 다음 구문은 영상 데이터저장소 imds의 영상 크기를 조정합니다.

auimds = augmentedImageDatastore(inputSize,imds);

딥러닝을 위해 영상을 효율적으로 전처리하려면(영상 크기 조정 포함) augmentedImageDatastore를 사용하십시오. ImageDatastore 객체의 ReadFcn 옵션을 사용하지 마십시오.

ImageDatastore는 프리페치 작업을 사용한 JPG 또는 PNG 영상 파일의 배치 읽기를 허용합니다. ReadFcn 옵션을 사용자 지정 함수로 설정하는 경우, ImageDatastore는 프리페치를 수행하지 않고 일반적으로 상당히 느립니다.

영상 증대하기

과적합을 방지하려면 영상 변환을 사용하십시오. 자세한 내용은 augmentedImageDatastore 항목을 참조하십시오.

회귀 목표값 정규화하기

예측 변수를 신경망에 입력하기 전에 먼저 정규화합니다. 훈련을 진행하기 전에 응답 변수를 정규화한 경우에는 훈련된 신경망의 예측값을 변환해야만 원래 응답 변수에 대한 예측값을 얻을 수 있습니다.

자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

시퀀스 데이터 전처리하기

LSTM 신경망을 사용하여 작업하는 것에 대한 자세한 내용은 장단기 기억 신경망 항목을 참조하십시오.

작업추가 정보
시퀀스 데이터 정규화하기

시퀀스 데이터를 정규화하려면 먼저 모든 시퀀스에 대해 특징별 평균값과 표준편차를 계산하십시오. 그런 다음 각 훈련 관측값에서 평균값을 빼고 표준편차로 나눕니다.

자세한 내용은 시퀀스 데이터 정규화하기 항목을 참조하십시오.

시퀀스 채우기와 자르기 줄이기

시퀀스를 채우거나 자를 때 사용되는 채우기 양이나 버려지는 데이터를 줄이려면 시퀀스 길이를 기준으로 데이터를 정렬해 보십시오.

자세한 내용은 시퀀스 채우기와 줄이기 항목을 참조하십시오.

예측을 위한 미니 배치의 크기와 채우기 옵션 지정하기

서로 길이가 다른 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오.

미니 배치 크기와 채우기 옵션을 지정하려면 minibatchpredict 함수의 MiniBatchSize 옵션과 SequenceLength 옵션을 사용하십시오.

사용 가능한 하드웨어 사용하기

실행 환경을 지정하려면 ExecutionEnvironment 훈련 옵션을 사용하십시오.

문제추가 정보
CPU에서의 훈련이 느림단일 CPU에서의 훈련이 너무 느리다면 사전 훈련된 딥러닝 신경망을 특징 추출기로 사용하여 머신러닝 모델을 훈련시켜 봅니다. 예제는 사전 훈련된 신경망을 사용하여 영상 특징 추출하기 항목을 참조하십시오.
GPU에서의 LSTM 훈련이 느림

짧은 시퀀스를 갖는 미니 배치를 사용하여 LSTM 신경망을 훈련시키는 데는 CPU가 더 적합합니다. CPU를 사용하려면 ExecutionEnvironment 훈련 옵션을 "cpu"로 설정하십시오.

소프트웨어가 사용 가능한 모든 GPU를 사용하지 않음복수의 GPU가 장착된 컴퓨터에 액세스할 수 있는 경우에는 ExecutionEnvironment 훈련 옵션을 "multi-gpu"로 설정하십시오. 자세한 내용은 복수의 GPU에서 MATLAB을 사용한 딥러닝 항목을 참조하십시오.

자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.

MAT 파일에서 불러오기 오류 수정하기

MAT 파일에서 계층 또는 신경망을 불러올 수 없고 다음과 같은 형식의 경고가 표시된다면

Warning: While loading an object of class 'dlnetwork':
Error using dlnetwork/initialize
Invalid network.

Error in dlnetwork (line 160)
                net = initialize(net, dlX{:});

Error in dlnetwork.loadobj (line 748)
                    net = dlnetwork(in.LayerGraph, exampleInputs{:},
                    'Initialize', in.Initialized);

Caused by:
    Layer 'layer': Error using the initialize function in layer sreluLayer. The
    function threw an error and could not be executed.
        Method 'initialize' is not defined for class 'sreluLayer' or is removed
        from
        MATLAB's search path. 
MAT 파일의 신경망이 사용할 수 없는 계층을 포함하고 있을 수 있습니다. 가능한 원인은 다음과 같습니다.

  • 파일이 경로상에 없는 사용자 지정 계층을 포함함 – 사용자 지정 계층을 포함하는 신경망을 불러오려면 MATLAB® 경로에 사용자 지정 계층 파일을 추가하십시오.

  • 파일이 지원 패키지의 사용자 지정 계층을 포함함 – 지원 패키지의 계층을 사용하는 신경망을 불러오려면 명령줄에서 해당 함수(예: imagePretrainedNetwork)를 사용하여 필요한 지원 패키지를 설치하거나 애드온 탐색기를 사용하여 지원 패키지를 설치하십시오.

  • 파일이 경로상에 없는 문서 예제의 사용자 지정 계층을 포함함 – 문서 예제의 사용자 지정 계층을 포함하는 신경망을 불러오려면 예제를 라이브 스크립트로 열고 예제 폴더에서 사용자의 작업 디렉터리로 계층을 복사하십시오.

  • 파일이 설치되지 않은 툴박스의 계층을 포함함 – 다른 툴박스(예: Computer Vision Toolbox 또는 Text Analytics Toolbox)의 계층에 액세스하려면 해당 툴박스를 설치하십시오.

제안된 해결 방법을 시도한 후에 MAT 파일을 다시 불러옵니다.

참고 항목

| | | | |

관련 항목