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

trainNetwork

심층 학습을 위해 신경망 훈련

trainNetwork를 사용하여 심층 학습 분류 및 회귀 문제에 대해 컨벌루션 신경망(ConvNet, CNN), 장단기 메모리(LSTM) 네트워크 또는 양방향 LSTM(BiLSTM) 네트워크를 훈련시킬 수 있습니다. 네트워크는 CPU 또는 GPU에서 훈련시킬 수 있습니다. 이미지 분류 및 이미지 회귀의 경우, 여러 개의 GPU를 사용하여 또는 병렬로 훈련시킬 수 있습니다. GPU 옵션, 다중 GPU 옵션, 병렬 옵션을 사용하려면 Parallel Computing Toolbox™가 필요합니다. 심층 학습을 위해 GPU를 사용하려면 CUDA® 지원 NVIDIA® GPU(Compute Capability 3.0 이상)도 필요합니다. trainingOptions를 사용하여 실행 환경 옵션을 비롯한 훈련 옵션을 지정합니다.

구문

trainedNet = trainNetwork(imds,layers,options)
trainedNet = trainNetwork(mbds,layers,options)
trainedNet = trainNetwork(X,Y,layers,options)
trainedNet = trainNetwork(sequences,Y,layers,options)
trainedNet = trainNetwork(tbl,layers,options)
trainedNet = trainNetwork(tbl,responseName,layers,options)
[trainedNet,traininfo] = trainNetwork(___)

설명

예제

trainedNet = trainNetwork(imds,layers,options)는 이미지 분류 문제를 위해 네트워크를 훈련시킵니다. imds는 입력 이미지 데이터를 저장하고, layers는 네트워크 아키텍처를 정의하고, options는 훈련 옵션을 정의합니다.

예제

trainedNet = trainNetwork(mbds,layers,options)는 미니 배치 데이터저장소 mdbs를 사용하여 네트워크를 훈련시킵니다. 미니 배치 데이터저장소를 사용하여 메모리에 담을 수 없는 큰 데이터를 읽어 들이거나, 데이터를 배치 단위로 읽을 때 특정 연산을 수행할 수 있습니다.

예제

trainedNet = trainNetwork(X,Y,layers,options)는 이미지 분류 및 회귀 문제를 위해 네트워크를 훈련시킵니다. X는 예측 변수를 포함하고, Y는 categorical형 레이블 또는 숫자형 응답 변수를 포함합니다.

예제

trainedNet = trainNetwork(sequences,Y,layers,options)는 분류 및 회귀 문제를 위해 LSTM 또는 BiLSTM 네트워크를 훈련시킵니다. sequences는 시퀀스 또는 시계열 예측 변수를 포함하는 셀형 배열이고, Y는 응답 변수를 포함합니다. 분류 문제에서 Y는 categorical형 벡터, 또는 categorical형 시퀀스로 구성된 셀형 배열입니다. 회귀 문제에서 Y는 목표값으로 구성된 행렬 또는 숫자형 시퀀스로 구성된 셀형 배열입니다.

trainedNet = trainNetwork(tbl,layers,options)는 분류 및 회귀 문제를 위해 네트워크를 훈련시킵니다. tbl은 숫자형 데이터 또는 데이터에 대한 파일 경로를 포함합니다. 예측 변수는 tbl의 첫 번째 열에 있어야 합니다. 목표값 또는 응답 변수에 대한 자세한 내용은 tbl 항목을 참조하십시오.

trainedNet = trainNetwork(tbl,responseName,layers,options)는 분류 및 회귀 문제를 위해 네트워크를 훈련시킵니다. 예측 변수는 tbl의 첫 번째 열에 있어야 합니다. responseName 인수는 tbl의 응답 변수를 지정합니다.

[trainedNet,traininfo] = trainNetwork(___)는 위에 열거된 구문에 나와 있는 입력 인수를 사용하여 훈련에 대한 정보도 반환합니다.

예제

모두 축소

데이터를 ImageDatastore 객체로서 불러옵니다.

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
    'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

이 데이터저장소에는 0부터 9까지 숫자를 나타내는 합성 이미지 10,000개가 있습니다. 이 이미지는 서로 다른 글꼴로 만들어진 숫자 이미지에 무작위 변환을 적용하여 생성됩니다. 각 숫자 이미지는 28x28픽셀입니다. 이 데이터저장소에는 범주당 동일한 개수의 이미지가 포함되어 있습니다.

데이터저장소의 이미지 몇 개를 표시합니다.

figure
numImages = 10000;
perm = randperm(numImages,20);
for i = 1:20
    subplot(4,5,i);
    imshow(imds.Files{perm(i)});
end

훈련 세트의 각 범주에 이미지 750개가 포함되고 테스트 세트에 각 레이블의 나머지 이미지가 포함되도록 데이터저장소를 분할합니다.

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabeldigitData의 이미지 파일을 2개의 새 데이터저장소인 imdsTrainimdsTest로 분할합니다.

컨벌루션 신경망 아키텍처를 정의합니다.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

옵션을 모멘텀을 사용한 확률적 경사하강법의 디폴트 설정으로 설정합니다. 최대 Epoch 횟수를 20으로 설정하고, 초기 학습률 0.0001로 훈련을 시작합니다.

options = trainingOptions('sgdm', ...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4, ...
    'Verbose',false, ...
    'Plots','training-progress');

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

net = trainNetwork(imdsTrain,layers,options);

이렇게 훈련된 네트워크를 네트워크 훈련에 사용하지 않은 테스트 세트에 대해 실행하고 이미지 레이블(숫자)을 예측합니다.

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

정확도를 계산합니다. 정확도는 테스트 데이터에 있는 이미지의 개수 대비 테스트 데이터에서 classify의 분류와 일치하는 실제 레이블의 개수의 비율입니다.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9896

증대 이미지 데이터를 사용하여 컨벌루션 신경망을 훈련시킵니다. 데이터 증대는 네트워크가 과적합되는 것을 방지하고 훈련 이미지의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.

손으로 쓴 숫자를 나타내는 합성 이미지로 구성된 샘플 데이터를 불러옵니다.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData는 숫자 훈련 세트를 4차원 배열 데이터로 불러옵니다. XTrain은 28x28x1x5,000 배열입니다. 여기서 각각은 다음을 나타냅니다.

  • 28은 이미지의 높이와 너비입니다.

  • 1은 채널의 개수입니다.

  • 5,000은 손으로 쓴 숫자를 나타내는 합성 이미지의 개수입니다.

YTrain은 각 관측값에 대한 레이블을 포함하는 categorical형 벡터입니다.

네트워크 검증을 위해 이미지 1,000개를 따로 빼 둡니다.

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

크기 조정, 회전, 평행 이동, 반사와 같은 이미지 증대 전처리 옵션을 지정하는 imageDataAugmenter 객체를 만듭니다. 이미지를 최대 3개 픽셀만큼 가로와 세로 방향으로 임의로 평행 이동하고 최대 20도의 각도로 이미지를 회전합니다.

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [-20 20]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [-3 3]
    RandYTranslation: [-3 3]

네트워크 훈련에 사용할 augmentedImageDatastore 객체를 만들고 이미지 출력 크기를 지정합니다. 데이터저장소는 훈련 중에 이미지를 증대하고 이미지의 크기를 조정합니다. 데이터저장소는 메모리에 이미지를 저장하지 않으면서 이미지를 증대합니다. trainNetwork는 네트워크 파라미터를 업데이트한 다음 증대된 이미지를 버립니다.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

컨벌루션 신경망 아키텍처를 지정합니다.

layers = [
    imageInputLayer(imageSize)
    
    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];

모멘텀을 사용한 확률적 경사하강법의 훈련 옵션을 지정합니다.

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

네트워크를 훈련시킵니다. 검증 이미지는 증대되지 않았으므로 훈련 정확도보다 검증 정확도가 높습니다.

net = trainNetwork(augimds,layers,opts);

손으로 쓴 숫자를 나타내는 합성 이미지로 구성된 샘플 데이터를 불러옵니다. 세 번째 출력값은 각 이미지가 회전된 각도(단위: 도)를 담고 있습니다.

digitTrain4DArrayData를 사용하여 훈련 이미지를 4차원 배열로 불러옵니다. 출력값 XTrain은 28x28x1x5,000 배열입니다. 여기서 각각은 다음을 나타냅니다.

  • 28은 이미지의 높이와 너비입니다.

  • 1은 채널의 개수입니다.

  • 5,000은 손으로 쓴 숫자를 나타내는 합성 이미지의 개수입니다.

YTrain은 회전 각도(단위: 도)를 담고 있습니다.

[XTrain,~,YTrain] = digitTrain4DArrayData;

imshow를 사용하여 임의의 훈련 이미지 20개를 표시합니다.

figure
numTrainImages = numel(YTrain);
idx = randperm(numTrainImages,20);
for i = 1:numel(idx)
    subplot(4,5,i)    
    imshow(XTrain(:,:,:,idx(i)))
end

컨벌루션 신경망 아키텍처를 지정합니다. 회귀 문제는 네트워크 끝부분에 회귀 계층을 삽입합니다.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(12,25)
    reluLayer
    fullyConnectedLayer(1)
    regressionLayer];

네트워크 훈련 옵션을 지정합니다. 초기 학습률을 0.001로 설정합니다.

options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.001, ...
    'Verbose',false, ...
    'Plots','training-progress');

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

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

테스트 데이터의 예측 정확도를 평가하여 네트워크의 성능을 테스트합니다. predict를 사용하여 검증 이미지의 회전 각도를 예측합니다.

[XTest,~,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);

회전의 예측 각도와 실제 각도의 RMSE(제곱평균제곱근 오차)를 계산하여 모델의 성능을 평가합니다.

rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
    6.4026

Sequence-to-label 분류를 위해 심층 학습 LSTM 네트워크를 훈련시킵니다.

[1]과 [2]에서 설명한 Japanese Vowels 데이터 세트를 불러옵니다. XTrain은 특징 차원이 12이고 다양한 길이의 시퀀스 270개로 구성된 셀형 배열입니다. Y는 레이블 1,2,...,9로 구성된 categorical형 벡터입니다. XTrain의 요소는 각 특징에 대해 하나의 행을 갖는 12개의 행과 각 시간 스텝에 대해 하나의 열을 갖는 가변 개수의 열로 이루어진 행렬입니다.

[XTrain,YTrain] = japaneseVowelsTrainData;

첫 번째 시계열을 플롯으로 시각화합니다. 선은 각각 하나의 특징에 대응됩니다.

figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')

LSTM 네트워크 아키텍처를 정의합니다. 입력 크기를 12(입력 데이터의 특징 개수)로 지정합니다. 은닉 유닛 100개를 포함하고 시퀀스의 마지막 요소를 출력하는 LSTM 계층을 지정합니다. 마지막으로, 크기가 9인 완전 연결 계층을 포함하여 9개의 클래스를 지정하고, 이어서 소프트맥스 계층과 분류 계층을 지정합니다.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

훈련 옵션을 지정합니다. 솔버를 'adam'으로 지정하고 'GradientThreshold'를 1로 지정합니다. 미니 배치의 크기를 27로 설정하고 최대 Epoch 횟수를 100으로 설정합니다.

미니 배치는 짧은 시퀀스로 구성된 크기가 작은 배치이므로 훈련에는 CPU가 더 적절합니다. 'ExecutionEnvironment''cpu'로 설정합니다. GPU를 사용할 수 있는 경우 GPU에서 훈련시키려면 'ExecutionEnvironment''auto'(디폴트 값)로 설정하십시오.

maxEpochs = 100;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

지정된 훈련 옵션으로 LSTM 네트워크를 훈련시킵니다.

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

테스트 세트를 불러오고 시퀀스를 화자별로 분류합니다.

[XTest,YTest] = japaneseVowelsTestData;

테스트 데이터를 분류합니다. 훈련에 사용된 것과 동일하게 미니 배치 크기를 지정합니다.

YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);

예측의 분류 정확도를 계산합니다.

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9270

입력 인수

모두 축소

레이블이 있는 이미지로, categorical형 레이블이 있는 ImageDatastore 객체로 지정됩니다. ImageDatastore에는 이미지 분류 네트워크를 위한 데이터만 저장할 수 있습니다.

ImageDatastore는 프리페치 작업을 사용한 JPG 또는 PNG 이미지 파일의 배치 읽기를 허용합니다. 이미지 읽기를 위해 사용자 지정 함수를 사용하는 경우, ImageDatastore는 프리페치를 수행하지 않습니다.

심층 학습을 위해 이미지를 효율적으로 전처리하려면(이미지 크기 조정 포함) augmentedImageDatastore를 사용하십시오.

imageDatastorereadFcn 옵션은 일반적으로 상당히 느리므로 사용하지 마십시오.

메모리에 담을 수 없이 큰 데이터와 전처리를 위한 미니 배치 데이터저장소로, 다음 중 하나로 지정됩니다.

미니 배치 데이터저장소의 유형설명
augmentedImageDatastore심층 신경망을 훈련시키기 위해 크기 조정, 회전, 반사, 전단, 평행 이동을 비롯한 무작위 아핀 기하 변환을 적용합니다.
pixelLabelImageDatastore의미론적 분할 네트워크를 훈련시키기 위해 이미지와 그 대응되는 실측 레이블에 동일한 아핀 기하 변환을 적용합니다(Computer Vision System Toolbox™ 필요).
randomPatchExtractionDatastore이미지 또는 픽셀 레이블 이미지로부터 임의 부분의 쌍을 추출합니다(Image Processing Toolbox™필요). 선택적으로 이런 부분의 쌍에 동일한 무작위 아핀 기하 변환을 적용할 수 있습니다.
denoisingImageDatastore잡음 제거 네트워크를 훈련시키기 위해 임의로 생성된 가우스 잡음을 적용합니다(Image Processing Toolbox 필요).
사용자 지정 미니 배치 데이터저장소자신만의 고유한 전처리 옵션을 지정하거나 시퀀스 데이터로 구성된 미니 배치를 만듭니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오.

미니 배치 데이터저장소를 사용하여 메모리에 담을 수 없는 큰 데이터를 읽어 들이거나, 데이터를 배치 단위로 읽을 때 특정 연산을 수행할 수 있습니다. 이미지 처리에 미니 배치 데이터저장소를 사용하는 방법에 대한 자세한 내용은 항목을 참조하십시오.

이미지로, 4차원 숫자형 배열로 지정됩니다. 처음 3개의 차원은 높이, 너비, 채널이고, 마지막 차원은 개별 이미지의 인덱스입니다.

배열에 NaN이 포함되어 있는 경우, 이 값이 훈련 끝까지 전파됩니다. 그러나 대부분의 경우 훈련이 수렴하지 않습니다.

데이터형: single | double | uint8 | int8 | uint16 | int16 | uint32 | int32

시퀀스 또는 시계열 데이터로, 행렬로 구성된 셀형 배열 또는 행렬로 지정됩니다. 셀형 배열 입력값의 경우, sequences는 Nx1 셀형 배열입니다. 여기서 N은 관측값의 개수입니다. sequences의 각 요소는 행이 데이터 점에 대응되고 열이 시간 스텝에 대응되는 행렬로 표현되는 시계열입니다.

관측값이 1개인 sequence-to-sequence 문제의 경우, sequences는 DxS 행렬이 될 수 있습니다. 여기서 D는 특징 개수이고 S는 시간 스텝의 개수입니다. sequences가 행렬인 경우, Y는 레이블로 구성된 categorical형 시퀀스 또는 응답 변수로 구성된 행렬이 되어야 합니다.

시퀀스 분류 및 회귀 문제의 경우, layers는 시퀀스 입력 계층으로 시작해야 합니다.

데이터형: cell | single | double

응답 변수로, 레이블로 구성된 categorical형 벡터, 행렬, 4차원 숫자형 배열, categorical형 행 벡터로 구성된 셀형 배열 또는 숫자형 시퀀스로 구성된 셀형 배열로 지정됩니다. Y의 형식은 문제의 유형에 따라 달라집니다.

분류 문제의 경우, 형식은 작업에 따라 달라집니다.

작업형식
이미지 분류레이블로 구성된 Nx1 categorical형 벡터로, 여기서 N은 관측값의 개수입니다.
Sequence-to-label 분류
Sequence-to-sequence 분류

레이블로 구성된 categorical형 시퀀스의 Nx1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 각 시퀀스는 대응하는 입력 시퀀스와 시간 스텝의 개수가 같습니다.

관측값이 1개인 sequence-to-sequence 분류 문제의 경우, sequences는 행렬이 될 수 있습니다. 이 경우 Y는 레이블로 구성된 categorical형 시퀀스가 되어야 합니다.

회귀 문제의 경우, 형식은 작업에 따라 달라집니다.

작업형식
이미지 회귀
  • NxR 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다.

  • hxwxcxN 숫자형 배열로, 여기서 N은 관측값의 개수이고 hxwxc는 단일 응답 변수의 이미지 크기입니다.

Sequence-to-one 회귀NxR 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다.
sequence-to-sequence 회귀

숫자형 시퀀스로 구성된 Nx1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 시퀀스는 R개의 행을 가진 행렬로, 여기서 R은 응답 변수의 개수입니다. 각 시퀀스는 대응하는 입력 시퀀스와 시간 스텝의 개수가 같습니다.

관측값이 1개인 sequence-to-sequence 회귀 문제의 경우, sequences는 행렬이 될 수 있습니다. 이 경우 Y는 응답 변수로 구성된 행렬이 되어야 합니다.

응답 변수를 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

응답 변수는 NaN을 포함할 수 없습니다.

데이터형: cell | categorical | double

입력 데이터로, 첫 번째 열에 예측 변수를 포함하고 나머지 열에 응답 변수를 포함하는 테이블로 지정됩니다. 테이블의 각 행은 관측값 하나에 대응됩니다.

테이블 열에서 예측 변수와 응답 변수의 배치되는 방식은 문제의 유형에 따라 달라집니다.

분류

작업예측 변수응답 변수
이미지 분류
  • 이미지에 대한 상대 또는 절대 파일 경로로, 문자형 벡터로 지정됩니다.

  • 이미지로, 3차원 숫자형 배열로 지정됩니다.

categorical형 레이블

sequence-to-label 분류

시퀀스 또는 시계열 데이터를 포함하는 MAT 파일에 대한 상대 또는 절대 파일 경로.

MAT 파일은 행이 데이터 점에 대응되고 열이 시간 스텝에 대응되는 행렬로 표현되는 시계열을 포함해야 합니다.

categorical형 레이블

sequence-to-sequence 분류

MAT 파일에 대한 상대 또는 절대 파일 경로. MAT 파일은 요소들이 각 시간 스텝에 대한 레이블에 대응되는 categorical형 벡터로 표현되는 시계열을 포함해야 합니다.

분류 문제의 경우, responseName을 지정하지 않으면 함수가 기본적으로 tbl의 두 번째 열에서 응답 변수를 사용합니다.

회귀

작업예측 변수응답 변수
이미지 회귀
  • 이미지에 대한 상대 또는 절대 파일 경로로, 문자형 벡터로 지정됩니다.

  • 이미지로, 3차원 숫자형 배열로 지정됩니다.

  • 스칼라 값으로 구성된 하나 이상의 열

  • 숫자형 벡터

  • 3차원 숫자형 배열을 포함하는 1x1 셀형 배열

sequence-to-one 회귀

시퀀스 또는 시계열 데이터를 포함하는 MAT 파일에 대한 상대 또는 절대 파일 경로.

MAT 파일은 행이 데이터 점에 대응되고 열이 시간 스텝에 대응되는 행렬로 표현되는 시계열을 포함해야 합니다.

  • 스칼라 값으로 구성된 하나 이상의 열

  • 숫자형 벡터

sequence-to-sequence 회귀

MAT 파일에 대한 상대 또는 절대 파일 경로. MAT 파일은 행이 응답 변수에 대응되고 열이 시간 스텝에 대응되는 행렬로 표현되는 시계열을 포함해야 합니다.

회귀 문제의 경우, responseName을 지정하지 않으면 함수가 기본적으로 tbl의 나머지 열을 사용합니다. 응답 변수를 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

시퀀스 분류 및 회귀 문제의 경우, layers는 시퀀스 입력 계층으로 시작해야 합니다.

응답 변수는 NaN을 포함할 수 없습니다. 예측 변수 데이터에 NaN이 포함되어 있는 경우, 이 값이 훈련 끝까지 전파됩니다. 그러나 대부분의 경우 훈련이 수렴하지 않습니다.

데이터형: table

입력 테이블에 있는 응답 변수의 이름으로, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 응답 변수가 1개인 문제의 경우, responseNametbl의 대응되는 변수 이름입니다. 응답 변수가 여러 개인 회귀 문제의 경우, responseNametbl의 대응되는 변수 이름으로 구성된 셀형 배열입니다.

데이터형: char | cell

네트워크 계층으로, Layer 배열 또는 LayerGraph 객체로 지정됩니다.

모든 계층이 순차적으로 연결된 네트워크를 만들려면 입력 인수로 Layer 배열을 사용하면 됩니다. 이 경우, 반환되는 네트워크는 SeriesNetwork 객체입니다.

DAG(유방향 비순환 그래프) 네트워크는 계층이 여러 개의 입력값과 출력값을 가질 수 있는 복잡한 구조를 갖습니다. DAG 네트워크를 만들려면 네트워크 아키텍처를 LayerGraph 객체로 지정한 다음 해당 계층 그래프를 trainNetwork에 대한 입력 인수로 사용하십시오.

내장 계층 목록은 List of Deep Learning Layers 항목을 참조하십시오.

훈련 옵션으로, trainingOptions 함수가 반환하는 TrainingOptionsSGDM, TrainingOptionsRMSProp 또는 TrainingOptionsADAM 객체로 지정됩니다. 솔버 및 네트워크 훈련을 위한 그 밖의 옵션을 지정하려면 trainingOptions를 사용하십시오.

출력 인수

모두 축소

훈련된 네트워크로, SeriesNetwork 객체 또는 DAGNetwork 객체로 반환됩니다.

Layer 배열을 layers 입력 인수로 사용하여 네트워크를 훈련시키는 경우, trainedNetSeriesNetwork 객체가 됩니다. LayerGraph 객체를 입력 인수로 사용하여 네트워크를 훈련시키는 경우, trainedNetDAGNetwork 객체가 됩니다.

각 반복의 훈련 정보로, 다음 필드가 조합된 구조체로 반환됩니다.

  • TrainingLoss — 각 반복의 손실 함수

  • TrainingAccuracy — 각 반복의 훈련 정확도

  • TrainingRMSE — 각 반복의 훈련 RMSE

  • ValidationLoss — 검증 데이터의 손실 함수 값

  • ValidationAccuracy — 검증 정확도

  • ValidationRMSE — 검증 RMSE

  • BaseLearnRate — 각 반복의 학습률

trainNetwork는 분류 네트워크의 경우 정확도 값을, 회귀 네트워크의 경우 RMSE 값을 반환하고, 훈련 중에 네트워크를 검증하는 경우 검증 측정값을 반환합니다. 각 필드는 훈련 반복 1회당 하나의 요소를 가진 숫자형 벡터입니다. 특정 반복에서 계산되지 않은 값은 NaN으로 표현됩니다.

세부 정보

모두 축소

검사 지점 네트워크를 저장하고 훈련 재개하기

Deep Learning Toolbox™를 사용하면 훈련 중에 매 Epoch 후에 네트워크를 .mat 파일로 저장할 수 있습니다. 네트워크 또는 데이터 세트의 규모가 커서 훈련시키는 데 오래 걸리는 경우에는 이와 같이 주기적으로 저장하는 것이 특히 유용합니다. 어떤 이유로 훈련이 중단된 경우, 마지막으로 저장된 검사 지점 네트워크에서부터 훈련을 재개할 수 있습니다. trainNetwork가 검사 지점 네트워크를 저장하도록 하려면 trainingOptions'CheckpointPath' 이름-값 쌍 인수를 사용하여 경로의 이름을 지정해야 합니다. 지정한 경로가 존재하지 않는 경우, trainingOptions는 오류를 반환합니다.

trainNetwork는 검사 지점 네트워크 파일에 자동으로 고유한 이름을 할당합니다. net_checkpoint__351__2018_04_12__18_09_52.mat라는 예제 이름에서 351은 반복 횟수이고, 2018_04_12는 날짜이고, 18_09_52trainNetwork가 네트워크를 저장한 시간입니다. 검사 지점 네트워크 파일은 파일을 더블 클릭하거나 명령줄에서 load 명령을 사용하여 불러올 수 있습니다. 예를 들면 다음과 같습니다.

load net_checkpoint__351__2018_04_12__18_09_52.mat
그런 다음 trainNetwork에 대한 입력 인수로 네트워크의 계층을 사용하여 훈련을 재개할 수 있습니다. 예를 들면 다음과 같습니다.

trainNetwork(XTrain,YTrain,net.Layers,options)
검사 지점 네트워크에는 훈련 옵션과 입력 데이터가 없으므로, 훈련 옵션 및 입력 데이터는 직접 지정해야 합니다. 예제는 Resume Training from Checkpoint Network 항목을 참조하십시오.

부동소수점 산술

Deep Learning Toolbox에 포함된 심층 학습 훈련, 예측 및 검증을 위한 모든 함수는 단정밀도 부동소수점 산술을 사용하여 계산을 수행합니다. 심층 학습을 위한 함수에는 trainNetwork, predict, classify, activations가 있습니다. CPU와 GPU를 모두 사용하여 네트워크를 훈련시키는 경우, 단정밀도 산술이 사용됩니다.

참고 문헌

[1] Kudo, M., J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pp. 1103–1111.

[2] Kudo, M., J. Toyama, and M. Shimbo. Japanese Vowels Data Set. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

확장 기능

R2016a에 개발됨