딥러닝 팁과 요령
이 페이지에서는 딥러닝 신경망의 정확도를 높이는 여러 훈련 옵션과 기법에 대해 설명합니다. 신경망 훈련 속도를 높이는 방법에 대한 자세한 내용은 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" 로 설정하십시오. |
검증 데이터 사용하기 | 검증 데이터를 지정하려면 참고 검증 데이터 세트가 너무 작아서 데이터를 충분히 나타내지 않는다면 보고된 메트릭이 도움이 되지 않을 수 있습니다. 너무 큰 검증 데이터 세트를 사용하면 훈련 속도가 느려질 수 있습니다. |
전이 학습의 경우, 새로운 계층은 학습 속도를 높이고 전이된 계층은 학습 속도를 늦추기 | 예를 들어,
전이 학습에서는 그렇게 많은 Epoch 횟수만큼 훈련하지 않아도 됩니다. Epoch 횟수는 심층 신경망 디자이너를 사용한 전이 학습을 위해 신경망을 대화형 방식으로 준비하는 방법을 알아보려면 심층 신경망 디자이너를 사용하는 전이 학습을 위해 신경망 준비하기 항목을 참조하십시오. |
매 Epoch마다 데이터 섞기 | 매 Epoch(데이터를 한번 완전히 통과한 것)마다 데이터를 섞으려면
참고 시퀀스 데이터의 경우, 섞기로 인해 채워진 데이터 또는 잘린 데이터의 양이 늘어날 수 있으므로 섞기가 정확도에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 사용하는 경우에는 시퀀스 길이를 기준으로 데이터를 정렬하는 것이 도움이 될 수 있습니다. 자세한 내용은 시퀀스 채우기와 줄이기 항목을 참조하십시오.
|
여러 최적화 함수 사용해 보기 | 여러 최적화 함수를 지정하려면 |
훈련 정확도 높이기
훈련 중에 문제가 발생한 경우 다음과 같은 가능한 해결 방법을 참고하십시오.
문제 | 가능한 해결 방법 |
---|---|
NaN 또는 손실의 큰 스파이크 |
학습률을 줄여도 도움이 되지 않는다면 기울기 제한을 사용해 봅니다. 기울기 임계값을 설정하려면 |
훈련 종료 시점에도 손실이 계속 줄어듦 | MaxEpochs 훈련 옵션을 사용하여 Epoch 횟수를 늘려 훈련을 더 오래 시킵니다. |
손실 일정화 | 예기치 않게 높은 값에서 손실이 일정화된 경우에는 일정화된 지점에서 학습률을 낮춥니다. 학습률 조정 계획을 변경하려면 학습률을 줄여도 도움이 되지 않는다면 모델이 과소적합된 것일 수 있습니다. 파라미터 또는 계층 개수를 늘려 보십시오. 검증 손실을 모니터링하여 모델이 과소적합된 것인지 여부를 확인할 수 있습니다. |
검증 손실이 훈련 손실보다 훨씬 높음 | 과적합을 방지하려면 다음 중 하나 이상을 시도해 보십시오.
|
손실이 매우 천천히 줄어듦 |
영상 데이터의 경우, 신경망에 배치 정규화 계층을 추가해 봅니다. 자세한 내용은 |
훈련의 오류 수정하기
신경망이 전혀 훈련되지 않는 경우 다음과 같은 가능한 해결 방법을 고려하십시오.
오류 | 설명 | 가능한 해결 방법 |
---|---|---|
훈련 중 메모리 부족 오류 | 사용 가능한 하드웨어로는 현재 미니 배치, 신경망 가중치 및 계산된 활성화를 저장할 수 없습니다. |
미니 배치 크기를 줄이는 것으로 오류가 해결되지 않는다면 더 작은 신경망을 사용해 보거나 계층 개수를 줄여 보거나 계층의 파라미터 또는 필터 개수를 줄여 봅니다. |
사용자 지정 계층 오류 | 사용자 지정 계층의 구현에 문제가 있을 수 있습니다. |
|
훈련이 'CUDA_ERROR_UNKNOWN' 오류를 발생시킴 | GPU가 OS의 계산 요청과 표시 요청 모두를 위해 사용될 때 이 오류를 발생시키는 경우가 있습니다. |
미니 배치 크기를 줄이는 것으로 오류가 해결되지 않는다면 Windows®에서 TDR(제한 시간 탐지 및 복구) 설정을 조정해 봅니다. 예를 들어, |
analyzeNetwork
를 사용하여 딥러닝 신경망을 분석할 수 있습니다. analyzeNetwork
함수는 신경망 아키텍처를 대화형 방식으로 표시하고, 신경망의 오류와 문제를 검출하고, 신경망 계층에 대한 상세한 정보를 제공합니다. 신경망 분석기를 사용해서 신경망 아키텍처를 시각화하여 이해하고, 아키텍처를 올바르게 정의했는지 확인하고, 훈련 전에 문제를 파악합니다. analyzeNetwork
에서 검출하는 문제에는 계층이 누락되었거나 연결이 끊긴 경우, 계층 입력 크기가 일치하지 않거나 올바르지 않은 경우, 계층 입력 개수가 올바르지 않은 경우, 신경망 구조가 유효하지 않은 경우 등이 포함됩니다.
데이터 준비하고 전처리하기
데이터를 전처리하여 정확도를 높일 수 있습니다.
클래스에 가중치 적용 또는 균형 맞추기
이상적인 경우라면 모든 클래스가 동일한 개수의 관측값을 갖습니다. 그러나 일부 작업의 경우 클래스의 균형이 맞지 않을 수 있습니다. 예를 들어, 거리 장면으로 구성된 자동차 데이터셋에서는 하늘과 건물, 도로가 영상에서 더 많은 영역을 차지하기 때문에 보행자, 자전거 운전자의 픽셀보다 하늘, 건물, 도로의 픽셀이 더 많습니다. 이러한 불균형을 올바르게 처리하지 않으면 비중이 더 큰 클래스로 인해 학습에 편향이 발생하여 학습을 저해할 수 있습니다.
분류 작업의 경우, trainnet
함수 내부에 사용자 지정 손실 함수를 사용하여 클래스 가중치를 지정할 수 있습니다. 예제는 Train Sequence Classification Network Using Data With Imbalanced Classes 항목을 참조하십시오.
또는 다음 중 하나 이상을 수행하여 클래스의 균형을 맞출 수 있습니다.
가장 빈도가 낮은 클래스의 새로운 관측값을 추가합니다.
가장 빈도가 높은 클래스의 관측값을 제거합니다.
비슷한 클래스를 그룹화합니다. 예를 들어, "자동차" 클래스와 "트럭" 클래스를 단일 클래스 "차량"으로 그룹화합니다.
영상 데이터 전처리하기
영상 데이터 전처리에 대한 자세한 내용은 딥러닝을 위해 영상 전처리하기 항목을 참조하십시오.
작업 | 추가 정보 |
---|---|
영상 크기 조정하기 | 사전 훈련된 신경망을 사용하려면 영상의 크기를 신경망의 입력 크기로 조정해야 합니다. 영상의 크기를 조정하려면 auimds = augmentedImageDatastore(inputSize,imds); 팁 딥러닝을 위해 영상을 효율적으로 전처리하려면(영상 크기 조정 포함)
|
영상 증대하기 | 과적합을 방지하려면 영상 변환을 사용하십시오. 자세한 내용은 |
회귀 목표값 정규화하기 | 예측 변수를 신경망에 입력하기 전에 먼저 정규화합니다. 훈련을 진행하기 전에 응답 변수를 정규화한 경우에는 훈련된 신경망의 예측값을 변환해야만 원래 응답 변수에 대한 예측값을 얻을 수 있습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오. |
시퀀스 데이터 전처리하기
LSTM 신경망을 사용하여 작업하는 것에 대한 자세한 내용은 장단기 기억 신경망 항목을 참조하십시오.
작업 | 추가 정보 |
---|---|
시퀀스 데이터 정규화하기 | 시퀀스 데이터를 정규화하려면 먼저 모든 시퀀스에 대해 특징별 평균값과 표준편차를 계산하십시오. 그런 다음 각 훈련 관측값에서 평균값을 빼고 표준편차로 나눕니다. 자세한 내용은 시퀀스 데이터 정규화하기 항목을 참조하십시오. |
시퀀스 채우기와 자르기 줄이기 | 시퀀스를 채우거나 자를 때 사용되는 채우기 양이나 버려지는 데이터를 줄이려면 시퀀스 길이를 기준으로 데이터를 정렬해 보십시오. 자세한 내용은 시퀀스 채우기와 줄이기 항목을 참조하십시오. |
예측을 위한 미니 배치의 크기와 채우기 옵션 지정하기 | 서로 길이가 다른 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오. 미니 배치 크기와 채우기 옵션을 지정하려면 |
사용 가능한 하드웨어 사용하기
실행 환경을 지정하려면 ExecutionEnvironment
훈련 옵션을 사용하십시오.
문제 | 추가 정보 |
---|---|
CPU에서의 훈련이 느림 | 단일 CPU에서의 훈련이 너무 느리다면 사전 훈련된 딥러닝 신경망을 특징 추출기로 사용하여 머신러닝 모델을 훈련시켜 봅니다. 예제는 사전 훈련된 신경망을 사용하여 영상 특징 추출하기 항목을 참조하십시오. |
GPU에서의 LSTM 훈련이 느림 | 짧은 시퀀스를 갖는 미니 배치를 사용하여 LSTM 신경망을 훈련시키는 데는 CPU가 더 적합합니다. 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.
파일이 경로상에 없는 사용자 지정 계층을 포함함 – 사용자 지정 계층을 포함하는 신경망을 불러오려면 MATLAB® 경로에 사용자 지정 계층 파일을 추가하십시오.
파일이 지원 패키지의 사용자 지정 계층을 포함함 – 지원 패키지의 계층을 사용하는 신경망을 불러오려면 명령줄에서 해당 함수(예:
imagePretrainedNetwork
)를 사용하여 필요한 지원 패키지를 설치하거나 애드온 탐색기를 사용하여 지원 패키지를 설치하십시오.파일이 경로상에 없는 문서 예제의 사용자 지정 계층을 포함함 – 문서 예제의 사용자 지정 계층을 포함하는 신경망을 불러오려면 예제를 라이브 스크립트로 열고 예제 폴더에서 사용자의 작업 디렉터리로 계층을 복사하십시오.
파일이 설치되지 않은 툴박스의 계층을 포함함 – 다른 툴박스(예: Computer Vision Toolbox 또는 Text Analytics Toolbox)의 계층에 액세스하려면 해당 툴박스를 설치하십시오.
제안된 해결 방법을 시도한 후에 MAT 파일을 다시 불러옵니다.
참고 항목
trainnet
| trainingOptions
| minibatchpredict
| checkLayer
| analyzeNetwork
| 심층 신경망 디자이너