이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
trainNetwork
딥러닝 신경망 훈련
구문
설명
분류 및 회귀 작업의 경우 trainNetwork
함수를 사용하여 다양한 유형의 신경망을 훈련시킬 수 있습니다.
예를 들어, 다음을 훈련시킬 수 있습니다.
영상 데이터에 대한 컨벌루션 신경망(ConvNet, CNN)
시퀀스 및 시계열 데이터에 대한 장단기 기억(LSTM) 또는 게이트 순환 유닛(GRU) 신경망과 같은 순환 신경망(RNN)
숫자형 특징 데이터에 대한 다층 퍼셉트론(MLP) 신경망
CPU 또는 GPU에서 훈련시킬 수 있습니다. 영상 분류 및 영상 회귀의 경우, 여러 개의 GPU나 로컬 또는 원격 병렬 풀을 사용하여 단일 신경망을 병렬로 훈련시킬 수 있습니다. GPU에서 또는 병렬로 훈련시키려면 Parallel Computing Toolbox™가 필요합니다. 딥러닝을 위해 GPU를 사용하려면 지원되는 GPU 장치도 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. 실행 환경 옵션을 비롯한 훈련 옵션을 지정하려면 trainingOptions
함수를 사용하십시오.
신경망을 훈련시킬 때 예측 변수와 응답 변수를 단일 입력 또는 두 개의 별도의 입력값으로 지정할 수 있습니다.
예제
영상 분류를 위해 신경망 훈련시키기
데이터를 ImageDatastore
객체로서 불러옵니다.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ... 'nndemos','nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
이 데이터저장소에는 0부터 9까지 숫자를 나타내는 합성 영상 10,000개가 있습니다. 이 영상은 서로 다른 글꼴로 만들어진 숫자 영상에 무작위 변환을 적용하여 생성됩니다. 각 숫자 영상은 28×28픽셀입니다. 이 데이터저장소에는 범주당 동일한 개수의 영상이 포함되어 있습니다.
데이터저장소의 영상 몇 개를 표시합니다.
figure numImages = 10000; perm = randperm(numImages,20); for i = 1:20 subplot(4,5,i); imshow(imds.Files{perm(i)}); drawnow; end
훈련 세트의 각 범주에 영상 750개가 포함되고 테스트 세트에 각 레이블의 나머지 영상이 포함되도록 데이터저장소를 분할합니다.
numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');
splitEachLabel
은 digitData
의 영상 파일을 2개의 새 데이터저장소인 imdsTrain
과 imdsTest
로 분할합니다.
컨벌루션 신경망 아키텍처를 정의합니다.
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.9404
증대 영상을 사용하여 신경망 훈련시키기
증대 영상 데이터를 사용하여 컨벌루션 신경망을 훈련시킵니다. 데이터 증대는 신경망이 과적합되는 것을 방지하고 훈련 영상의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.
손으로 쓴 숫자를 나타내는 합성 영상으로 구성된 샘플 데이터를 불러옵니다.
[XTrain,YTrain] = digitTrain4DArrayData;
digitTrain4DArrayData
는 숫자 훈련 세트를 4차원 배열 데이터로 불러옵니다. XTrain
은 28×28×1×5,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
은 28×28×1×5,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))) drawnow; 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.0671
시퀀스 분류를 위해 신경망 훈련시키기
Sequence-to-label 분류를 위해 딥러닝 LSTM 신경망을 훈련시킵니다.
[1]과 [2]에서 설명한 Japanese Vowels 데이터 세트를 불러옵니다. XTrain
은 LPC 켑스트럼 계수에 대응되는 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 횟수를 70으로 설정합니다.
미니 배치는 짧은 시퀀스로 구성된 크기가 작은 배치이므로 훈련에는 CPU가 더 적절합니다. 'ExecutionEnvironment'
를 'cpu'
로 설정합니다. GPU를 사용할 수 있는 경우 GPU에서 훈련시키려면 'ExecutionEnvironment'
를 'auto'
(디폴트 값)로 설정하십시오.
maxEpochs = 70; 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.9595
숫자형 특징을 사용하여 신경망 훈련시키기
숫자형 특징으로 구성된 데이터 세트(예: 공간 차원 또는 시간 차원이 없는 숫자형 데이터의 모음)가 있는 경우, 특징 입력 계층을 사용하여 딥러닝 신경망을 훈련시킬 수 있습니다.
CSV 파일 "transmissionCasingData.csv"
에서 변속기 케이싱 데이터를 읽어 들입니다.
filename = "transmissionCasingData.csv"; tbl = readtable(filename,'TextType','String');
convertvars
함수를 사용하여 예측을 위한 레이블을 categorical형으로 변환합니다.
labelName = "GearToothCondition"; tbl = convertvars(tbl,labelName,'categorical');
범주형 특징을 사용하여 신경망을 훈련시키려면 먼저 범주형 특징을 숫자형으로 변환해야 합니다. 먼저 모든 범주형 입력 변수의 이름을 포함하는 string형 배열을 지정하여 convertvars
함수를 사용해서 범주형 예측 변수를 categorical형으로 변환합니다. 이 데이터 세트에는 이름이 "SensorCondition"
과 "ShaftCondition"
인 범주형 특징이 2개 있습니다.
categoricalInputNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalInputNames,'categorical');
범주형 입력 변수를 루프를 사용해 순환합니다. 각 변수에 대해 다음을 수행하십시오.
onehotencode
함수를 사용하여 categorical형 값을 one-hot 형식으로 인코딩된 벡터로 변환합니다.addvars
함수를 사용하여 one-hot 벡터를 테이블에 추가합니다. 이때 벡터가 해당 범주형 데이터의 열 뒤에 삽입되도록 지정합니다.범주형 데이터를 포함하는 열을 제거합니다.
for i = 1:numel(categoricalInputNames) name = categoricalInputNames(i); oh = onehotencode(tbl(:,name)); tbl = addvars(tbl,oh,'After',name); tbl(:,name) = []; end
splitvars
함수를 사용하여 벡터를 개별 열로 분할합니다.
tbl = splitvars(tbl);
테이블의 처음 몇 개 행을 봅니다. 범주형 예측 변수가 이 범주형 값을 변수 이름으로 갖는 여러 개의 열로 분할된 것을 볼 수 있습니다.
head(tbl)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis No Sensor Drift Sensor Drift No Shaft Wear Shaft Wear GearToothCondition ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________ ________________ _______________ ____________ _____________ __________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 0 1 1 0 No Tooth Fault -0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 0 1 1 0 No Tooth Fault 1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 0 1 0 1 No Tooth Fault 1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 0 4.99e-06 2.4e-07 162.13 0 1 0 1 No Tooth Fault 1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 0 3.62e-06 2.28e-07 230.39 0 1 0 1 No Tooth Fault 1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0985 0.033427 64.576 0 2.55e-06 1.65e-07 230.39 0 1 0 1 No Tooth Fault 1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 0 1 0 1 No Tooth Fault 1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 0 1 0 1 No Tooth Fault
데이터 세트의 클래스 이름을 봅니다.
classNames = categories(tbl{:,labelName})
classNames = 2x1 cell
{'No Tooth Fault'}
{'Tooth Fault' }
다음으로, 데이터 세트를 훈련 파티션과 테스트 파티션으로 분할합니다. 테스트를 위해 데이터의 15%를 남겨 둡니다.
각 파티션의 관측값 개수를 결정합니다.
numObservations = size(tbl,1); numObservationsTrain = floor(0.85*numObservations); numObservationsTest = numObservations - numObservationsTrain;
관측값에 대응되는 임의 인덱스로 구성된 배열을 만들고, 파티션 크기를 사용하여 배열을 분할합니다.
idx = randperm(numObservations); idxTrain = idx(1:numObservationsTrain); idxTest = idx(numObservationsTrain+1:end);
인덱스를 사용하여 데이터 테이블을 훈련 파티션과 테스트 파티션으로 분할합니다.
tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
특징 입력 계층을 갖는 신경망을 정의하고 특징 개수를 지정합니다. 또한, Z-점수 정규화를 사용하여 데이터를 정규화하도록 입력 계층을 구성합니다.
numFeatures = size(tbl,2) - 1; numClasses = numel(classNames); layers = [ featureInputLayer(numFeatures,'Normalization', 'zscore') fullyConnectedLayer(50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
훈련 옵션을 지정합니다.
miniBatchSize = 16; options = trainingOptions('adam', ... 'MiniBatchSize',miniBatchSize, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Verbose',false);
layers
에 의해 정의된 아키텍처, 훈련 데이터 및 훈련 옵션을 사용하여 신경망을 훈련시킵니다.
net = trainNetwork(tblTrain,layers,options);
훈련된 신경망을 사용하여 테스트 데이터의 레이블을 예측하고 정확도를 계산합니다. 정확도는 신경망이 올바르게 예측하는 레이블의 비율입니다.
YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688
입력 인수
images
— 영상 데이터
데이터저장소 | 숫자형 배열 | 테이블
영상 데이터로, 다음 중 하나로 지정됩니다.
데이터 유형 | 설명 | 대표적인 사용법 | |
---|---|---|---|
데이터저장소 | ImageDatastore | 디스크에 저장된 영상의 데이터저장소. | 디스크에 저장된 같은 크기의 영상들을 사용하여 영상 분류 신경망을 훈련시킵니다. 영상 크기가 서로 다른 경우
|
AugmentedImageDatastore | 크기 조정, 회전, 반사, 전단, 평행 이동을 비롯한 무작위 아핀 기하 변환을 적용하는 데이터저장소. |
| |
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
| |
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
| |
PixelLabelImageDatastore (Computer Vision Toolbox) | 영상과 그 대응되는 픽셀 레이블에 동일한 아핀 기하 변환을 적용하는 데이터저장소. | 의미론적 분할을 위해 신경망을 훈련시킵니다. | |
RandomPatchExtractionDatastore (Image Processing Toolbox) | 영상 또는 픽셀 레이블 영상으로부터 임의 부분의 쌍을 추출하고 선택적으로 이러한 부분의 쌍에 동일한 무작위 아핀 기하 변환을 적용하는 데이터저장소. | 객체 검출을 위해 신경망을 훈련시킵니다. | |
DenoisingImageDatastore (Image Processing Toolbox) | 무작위로 생성된 가우스 잡음을 적용하는 데이터저장소. | 영상 잡음 제거를 위해 신경망을 훈련시킵니다. | |
사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. | |
숫자형 배열 | 영상으로, 숫자형 배열로 지정됩니다. 영상을 숫자형 배열로 지정하는 경우 responses 인수도 지정해야 합니다. | 메모리에 맞고 증대와 같은 추가 처리가 필요하지 않은 데이터를 사용하여 신경망을 훈련시킵니다. | |
테이블 | 영상으로, 테이블로 지정됩니다. 영상을 테이블로 지정하는 경우 responses 인수를 사용하여 응답 변수가 포함된 열을 지정할 수도 있습니다. | 테이블에 저장된 데이터를 사용하여 신경망을 훈련시킵니다. |
여러 개의 입력값을 갖는 신경망의 경우, 데이터저장소는 TransformedDatastore
객체이거나 CombinedDatastore
객체여야 합니다.
팁
비디오 데이터와 같은 영상 시퀀스의 경우 sequences
입력 인수를 사용하십시오.
데이터저장소
데이터저장소는 영상 및 응답 변수의 미니 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 증대 또는 변환을 적용하려는 경우에 가장 적합합니다.
다음 목록에는 영상 데이터에 대해 trainNetwork
와 직접 호환되는 데이터저장소가 나열되어 있습니다.
PixelLabelImageDatastore
(Computer Vision Toolbox)RandomPatchExtractionDatastore
(Image Processing Toolbox)DenoisingImageDatastore
(Image Processing Toolbox)사용자 지정 미니 배치 데이터저장소. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오.
예를 들어 imageDatastore
함수를 사용하여 영상 데이터저장소를 만들고 'LabelSource'
옵션을 'foldernames'
로 설정하여 영상이 들어 있는 폴더의 이름을 레이블로 사용합니다. 또는 영상 데이터저장소의 Labels
속성을 사용하여 레이블을 직접 지정할 수도 있습니다.
ImageDatastore
객체는 프리페치 작업을 사용한 JPG 또는 PNG 영상 파일의 배치 읽기를 허용합니다. 영상 읽기를 위해 사용자 지정 함수를 사용하는 경우 ImageDatastore
객체는 프리페치를 수행하지 않습니다.
팁
딥러닝을 위해 영상을 효율적으로 전처리하려면(영상 크기 조정 포함) augmentedImageDatastore
를 사용하십시오.
imageDatastore
함수의 readFcn
옵션은 일반적으로 상당히 느리므로 전처리나 크기 조정을 위해 사용하지 마십시오.
transform
함수와 combine
함수를 사용하여 딥러닝 신경망 훈련을 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainNetwork
에 필요한 형식으로 변환할 수 있습니다.
여러 개의 입력값을 갖는 신경망의 경우, 데이터저장소는 TransformedDatastore
객체이거나 CombinedDatastore
객체여야 합니다.
데이터저장소 출력값의 필요한 형식은 신경망 아키텍처에 따라 달라집니다.
신경망 아키텍처 | 데이터저장소 출력값 | 출력값의 예 |
---|---|---|
하나의 입력 계층 | 두 개의 열로 구성된 테이블 또는 셀형 배열. 첫 번째 열과 두 번째 열은 각각 예측 변수와 응답 변수를 지정합니다. 테이블 요소는 스칼라 또는 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. | 1개의 입력값과 1개의 출력값을 갖는 신경망에 대한 테이블: data = read(ds) data = 4×2 table Predictors Response __________________ ________ {224×224×3 double} 2 {224×224×3 double} 7 {224×224×3 double} 9 {224×224×3 double} 9 |
1개의 입력값과 1개의 출력값을 갖는 신경망에 대한 셀형 배열: data = read(ds) data = 4×2 cell array {224×224×3 double} {[2]} {224×224×3 double} {[7]} {224×224×3 double} {[9]} {224×224×3 double} {[9]} | ||
여러 개의 입력 계층 | ( 처음 입력값의 순서는 계층 그래프 | 2개의 입력값과 1개의 출력값을 갖는 신경망에 대한 셀형 배열. data = read(ds) data = 4×3 cell array {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[9]} {224×224×3 double} {128×128×3 double} {[9]} |
예측 변수의 형식은 데이터의 유형에 따라 달라집니다.
데이터 | 형식 |
---|---|
2차원 영상 | h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다. |
3차원 영상 | h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다. |
테이블로 반환되는 예측 변수의 경우, 요소는 숫자형 스칼라 또는 숫자형 행 벡터를 포함하거나 숫자형 배열을 포함하는 1×1 셀형 배열을 포함해야 합니다.
응답 변수의 형식은 작업의 유형에 따라 달라집니다.
작업 | 응답 변수 형식 |
---|---|
영상 분류 | categorical형 스칼라 |
영상 회귀 |
|
테이블로 반환되는 응답 변수의 경우, 요소는 categorical형 스칼라, 숫자형 스칼라 또는 숫자형 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다.
자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
숫자형 배열
메모리에 맞고 증대와 같은 추가 처리가 필요하지 않은 데이터의 경우 영상 데이터 세트를 숫자형 배열로 지정할 수 있습니다. 영상을 숫자형 배열로 지정하는 경우 responses
인수도 지정해야 합니다.
숫자형 배열의 크기와 형태는 영상 데이터의 유형에 따라 달라집니다.
데이터 | 형식 |
---|---|
2차원 영상 | h×w×c×N 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수이고 N은 영상 개수입니다. |
3차원 영상 | h×w×d×c×N 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수이고 N은 영상 개수입니다. |
테이블
데이터저장소 또는 숫자형 배열의 대안으로 테이블에 영상 및 응답 변수를 지정할 수도 있습니다. 영상을 테이블로 지정하는 경우 responses
인수를 사용하여 응답 변수가 포함된 열을 지정할 수도 있습니다.
테이블에 영상과 응답 변수를 지정할 때 테이블의 각 행은 관측값 하나에 대응됩니다.
영상 입력의 경우 예측 변수는 다음 중 하나로 지정된 테이블의 첫 번째 열에 있어야 합니다.
영상에 대한 상대 또는 절대 파일 경로로, 문자형 벡터로 지정됩니다.
2차원 영상을 나타내는 h×w×c 숫자형 배열을 포함하는 1×1 셀형 배열로, 여기서 h, w 및 c는 각각 영상의 높이, 너비, 채널의 개수입니다.
응답 변수의 형식은 작업의 유형에 따라 달라집니다.
작업 | 응답 변수 형식 |
---|---|
영상 분류 | categorical형 스칼라 |
영상 회귀 |
|
영상 입력값을 갖는 신경망의 경우, responses
를 지정하지 않으면 함수는 기본적으로 tbl
의 첫 번째 열을 예측 변수용으로 사용하고 뒤에 오는 열을 응답 변수용으로 사용합니다.
팁
예측 변수 또는 응답 변수에
NaN
이 포함되어 있는 경우, 훈련 중에 이 값이 신경망 끝까지 전파됩니다. 이러한 경우 일반적으로 훈련이 수렴하지 않습니다.회귀 작업의 경우, 응답 변수를 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
복소수 값 데이터를 신경망에 입력하려면 입력 계층의
SplitComplexInputs
옵션이1
이어야 합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
복소수 지원 여부: 예
sequences
— 시퀀스 또는 시계열 데이터
데이터저장소 | 숫자형 시퀀스로 구성된 셀형 배열 | 숫자형 배열
시퀀스 또는 시계열 데이터로, 다음 중 하나로 지정됩니다.
데이터 유형 | 설명 | 대표적인 사용법 | |
---|---|---|---|
데이터저장소 | TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. | 서로 다른 데이터 소스의 예측 변수와 응답 변수를 결합합니다. | |
사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. | |
숫자형 또는 셀형 배열 | 숫자형 배열로 지정된 단일 시퀀스 또는 숫자형 배열로 구성된 셀형 배열로 지정된 시퀀스 데이터 세트. 시퀀스를 숫자형 배열 또는 셀형 배열로 지정하는 경우 responses 인수도 지정해야 합니다. | 메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 데이터를 사용하여 신경망을 훈련시킵니다. |
데이터저장소
데이터저장소는 시퀀스 및 응답 변수의 미니 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 변환을 적용하려는 경우에 가장 적합합니다.
다음 목록에는 시퀀스 데이터에 대해 trainNetwork
와 직접 호환되는 데이터저장소가 나열되어 있습니다.
사용자 지정 미니 배치 데이터저장소. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오.
transform
함수와 combine
함수를 사용하여 딥러닝 신경망 훈련을 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainNetwork
에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 예를 들어, 각각 ArrayDatastore
객체 및 TabularTextDatastore
객체를 사용하여 메모리 내 배열 및 CSV 파일에서 읽어 들인 데이터를 변환하고 결합할 수 있습니다.
데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다.
데이터저장소 출력값 | 출력값의 예 |
---|---|
테이블 | data = read(ds) data = 4×2 table Predictors Response __________________ ________ {12×50 double} 2 {12×50 double} 7 {12×50 double} 9 {12×50 double} 9 |
셀형 배열 | data = read(ds) data = 4×2 cell array {12×50 double} {[2]} {12×50 double} {[7]} {12×50 double} {[9]} {12×50 double} {[9]} |
예측 변수의 형식은 데이터의 유형에 따라 달라집니다.
데이터 | 예측 변수의 형식 |
---|---|
벡터 시퀀스 | c×s 행렬로, 여기서 c는 시퀀스의 특징 개수이고, s는 시퀀스 길이입니다. |
1차원 영상 시퀀스 | h×c×s 배열로, 여기서 h, c는 각각 영상의 높이와 채널 개수이고, s는 시퀀스 길이입니다. 미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
2차원 영상 시퀀스 | h×w×c×s 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수이고, s는 시퀀스 길이입니다. 미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
3차원 영상 시퀀스 | h×w×d×c×s 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수이고, s는 시퀀스 길이입니다. 미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
테이블로 반환되는 예측 변수의 경우, 요소는 숫자형 스칼라 또는 숫자형 행 벡터를 포함하거나 숫자형 배열을 포함하는 1×1 셀형 배열을 포함해야 합니다.
응답 변수의 형식은 작업의 유형에 따라 달라집니다.
작업 | 응답 변수의 형식 |
---|---|
sequence-to-label 분류 | categorical형 스칼라 |
sequence-to-one 회귀 | 스칼라 |
sequence-to-vector 회귀 | 숫자형 행 벡터 |
sequence-to-sequence 분류 |
미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
sequence-to-sequence 회귀 |
미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
테이블로 반환되는 응답 변수의 경우, 요소는 categorical형 스칼라, 숫자형 스칼라 또는 숫자형 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다.
자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
숫자형 또는 셀형 배열
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 데이터의 경우 단일 시퀀스를 숫자형 배열로 지정하거나 시퀀스 데이터 세트를 숫자형 배열로 구성된 셀형 배열로 지정할 수 있습니다. 시퀀스를 셀형 배열 또는 숫자형 배열로 지정하는 경우 responses
인수도 지정해야 합니다.
셀형 배열 입력값의 경우 셀형 배열은 숫자형 배열로 구성된 N×1 셀형 배열이어야 합니다. 여기서 N은 관측값의 개수입니다. 시퀀스를 나타내는 숫자형 배열의 크기와 형태는 시퀀스 데이터의 유형에 따라 달라집니다.
입력값 | 설명 |
---|---|
벡터 시퀀스 | c×s 행렬. 여기서 c는 시퀀스의 특징 개수이고 s는 시퀀스 길이입니다. |
1차원 영상 시퀀스 | h×c×s 배열. 여기서 h, c는 각각 영상의 높이, 채널 개수이고 s는 시퀀스 길이입니다. |
2차원 영상 시퀀스 | h×w×c×s 배열. 여기서 h, w, c는 영상의 높이, 너비, 채널 개수이고 s는 시퀀스 길이입니다. |
3차원 영상 시퀀스 | h×w×d×c×s 배열. 여기서 h, w, d, c는 3차원 영상의 높이, 너비, 깊이, 채널 개수이고 s는 시퀀스 길이입니다. |
trainNetwork
함수는 최대 하나의 시퀀스 입력 계층을 갖는 신경망을 지원합니다.
팁
예측 변수 또는 응답 변수에
NaN
이 포함되어 있는 경우, 훈련 중에 이 값이 신경망 끝까지 전파됩니다. 이러한 경우 일반적으로 훈련이 수렴하지 않습니다.회귀 작업의 경우, 응답 변수를 정규화하면 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
복소수 값 데이터를 신경망에 입력하려면 입력 계층의
SplitComplexInputs
옵션이1
이어야 합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
복소수 지원 여부: 예
features
— 특징 데이터
데이터저장소 | 숫자형 배열 | 테이블
특징 데이터로, 다음 중 하나로 지정됩니다.
데이터 유형 | 설명 | 대표적인 사용법 | |
---|---|---|---|
데이터저장소 | TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
| |
사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. | |
테이블 | 특징 데이터로, 테이블로 지정됩니다. 특징을 테이블로 지정하는 경우 responses 인수를 사용하여 응답 변수가 포함된 열을 지정할 수도 있습니다. | 테이블에 저장된 데이터를 사용하여 신경망을 훈련시킵니다. | |
숫자형 배열 | 특징 데이터로, 숫자형 배열로 지정됩니다. 특징을 숫자형 배열로 지정하는 경우 responses 인수도 지정해야 합니다. | 메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 데이터를 사용하여 신경망을 훈련시킵니다. |
데이터저장소
데이터저장소는 특징 데이터 및 응답 변수의 미니 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 변환을 적용하려는 경우에 가장 적합합니다.
다음 표에는 특징 데이터에 대해 trainNetwork
와 직접 호환되는 데이터저장소가 나열되어 있습니다.
사용자 지정 미니 배치 데이터저장소. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오.
transform
함수와 combine
함수를 사용하여 딥러닝 신경망 훈련을 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainNetwork
에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
여러 개의 입력값을 갖는 신경망의 경우, 데이터저장소는 TransformedDatastore
객체이거나 CombinedDatastore
객체여야 합니다.
데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. 데이터저장소 출력값의 형식은 신경망 아키텍처에 따라 달라집니다.
신경망 아키텍처 | 데이터저장소 출력값 | 출력값의 예 |
---|---|---|
하나의 입력 계층 | 두 개의 열로 구성된 테이블 또는 셀형 배열. 첫 번째 열과 두 번째 열은 각각 예측 변수와 응답 변수를 지정합니다. 테이블 요소는 스칼라 또는 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. | 1개의 입력값과 1개의 출력값을 갖는 신경망에 대한 테이블: data = read(ds) data = 4×2 table Predictors Response __________________ ________ {24×1 double} 2 {24×1 double} 7 {24×1 double} 9 {24×1 double} 9 |
1개의 입력값과 1개의 출력값을 갖는 신경망에 대한 셀형 배열:
data = read(ds) data = 4×2 cell array {24×1 double} {[2]} {24×1 double} {[7]} {24×1 double} {[9]} {24×1 double} {[9]} | ||
여러 개의 입력 계층 | ( 처음 입력값의 순서는 계층 그래프 | 2개의 입력값과 1개의 출력값을 갖는 신경망에 대한 셀형 배열: data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
예측 변수는 c×1 열 벡터여야 합니다. 여기서 c는 특징의 개수입니다.
응답 변수의 형식은 작업의 유형에 따라 달라집니다.
작업 | 응답 변수의 형식 |
---|---|
분류 | categorical형 스칼라 |
회귀 |
|
자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
테이블
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 특징 데이터의 경우 특징 데이터와 응답 변수를 테이블로 지정할 수 있습니다.
테이블의 각 행은 관측값 하나에 대응됩니다. 테이블 열에서 예측 변수와 응답 변수의 배치되는 방식은 작업의 유형에 따라 달라집니다.
작업 | 예측 변수 | 응답 변수 |
---|---|---|
특징 분류 | 하나 이상의 열에 스칼라로 지정된 특징.
| categorical형 레이블 |
특징 회귀 | 스칼라 값으로 구성된 하나 이상의 열 |
특징 입력값을 갖는 분류 신경망의 경우, responses
인수를 지정하지 않으면 함수는 기본적으로 tbl
의 처음 (numColumns - 1
)개 열을 예측 변수용으로 사용하고 마지막 열을 레이블용으로 사용합니다. 여기서 numFeatures
는 입력 데이터의 특징 개수입니다.
특징 입력값을 갖는 회귀 신경망의 경우, responseNames
인수를 지정하지 않으면 함수는 기본적으로 처음 numFeatures
개 열을 예측 변수용으로 사용하고 뒤에 오는 열을 응답 변수용으로 사용합니다. 여기서 numFeatures
는 입력 데이터의 특징 개수입니다.
숫자형 배열
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 특성 데이터의 경우 특징 데이터를 숫자형 배열로 지정할 수 있습니다. 특징 데이터를 숫자형 배열로 지정하는 경우 responses
인수도 지정해야 합니다.
숫자형 배열은 N×numFeatures
숫자형 배열이어야 합니다. 여기서 N은 관측값의 개수이고, numFeatures
는 입력 데이터의 특징의 개수입니다.
팁
응답 변수를 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
응답 변수는
NaN
을 포함해서는 안 됩니다. 예측 변수 데이터에NaN
이 포함되어 있는 경우, 이 값이 훈련 끝까지 전파됩니다. 그러나 대부분의 경우 훈련이 수렴하지 않습니다.복소수 값 데이터를 신경망에 입력하려면 입력 계층의
SplitComplexInputs
옵션이1
이어야 합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
복소수 지원 여부: 예
mixed
— 혼합된 데이터
데이터저장소
혼합된 데이터 및 응답 변수로, 다음 중 하나로 지정됩니다.
데이터 유형 | 설명 | 대표적인 사용법 |
---|---|---|
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
|
사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. |
transform
함수와 combine
함수를 사용하여 딥러닝 신경망 훈련을 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainNetwork
에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. 데이터저장소 출력값의 형식은 신경망 아키텍처에 따라 달라집니다.
데이터저장소 출력값 | 출력값의 예 |
---|---|
( 처음 입력값의 순서는 계층 그래프 | data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
영상, 시퀀스, 특징 예측 변수 입력값에 대해 예측 변수 형식은 각각 images
, sequences
, features
인수 설명에 기술된 형식과 일치해야 합니다. 마찬가지로, 응답 변수의 형식은 작업 유형에 대응하는 images
, sequences
또는 features
인수 설명에 기술된 형식과 일치해야 합니다.
trainNetwork
함수는 최대 하나의 시퀀스 입력 계층을 갖는 신경망을 지원합니다.
여러 개의 입력값을 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 영상 데이터와 특징 데이터로 신경망 훈련시키기 항목을 참조하십시오.
팁
숫자형 배열을 데이터저장소로 변환하려면,
ArrayDatastore
를 사용하십시오.혼합된 데이터형으로 구성된 신경망에서 계층을 결합하는 경우 데이터를 결합 계층으로 전달하기 전에 데이터 형식을 다시 지정해야 할 수 있습니다(예: 결합 또는 추가 계층). 데이터 형식을 다시 지정하려면 평탄화 계층을 사용하여 공간 차원을 채널 차원으로 평탄화하거나 형식을 새로 지정하고 형태를 변경하는
FunctionLayer
객체 또는 사용자 지정 계층을 만들면 됩니다.
responses
— 응답 변수
categorical형 벡터 | 숫자형 배열 | 시퀀스로 구성된 셀형 배열 | 문자형 벡터 | 문자형 벡터로 구성된 셀형 배열 | string형 배열
응답 변수.
입력 데이터가 셀형 배열로 구성된 숫자형 배열인 경우 응답 변수를 다음 중 하나로 지정합니다.
레이블로 구성된 categorical형 벡터
숫자형 응답 변수로 구성된 숫자형 배열
categorical형 또는 숫자형 시퀀스로 구성된 셀형 배열
입력 데이터가 테이블인 경우 다음 중 하나로 응답 변수를 포함하는 테이블 열을 선택적으로 지정할 수 있습니다.
문자형 벡터
문자형 벡터로 구성된 셀형 배열
string형 배열
입력 데이터가 숫자형 배열 또는 셀형 배열인 경우 응답 변수의 형식은 작업 유형에 따라 달라집니다.
작업 | 형식 | |
---|---|---|
분류 | 영상 분류 | 레이블로 구성된 N×1 categorical형 벡터로, 여기서 N은 관측값의 개수입니다. |
특징 분류 | ||
sequence-to-label 분류 | ||
sequence-to-sequence 분류 | 레이블로 구성된 categorical형 시퀀스의 N×1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 각 시퀀스는 대응되는 예측 변수 시퀀스와 시간 스텝 개수가 동일해야 합니다. 관측값이 1개인 sequence-to-sequence 분류 작업의 경우, | |
회귀 | 2차원 영상 회귀 |
|
3차원 영상 회귀 |
| |
특징 회귀 | N×R 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다. | |
sequence-to-one 회귀 | N×R 행렬로, 여기서 N은 시퀀스의 개수이고 R은 응답 변수의 개수입니다. | |
sequence-to-sequence 회귀 | 숫자형 시퀀스로 구성된 N×1 셀형 배열로, 여기서 N은 시퀀스의 개수입니다. 시퀀스는 다음 중 하나로 지정됩니다.
관측값이 1개인 sequence-to-sequence 회귀 작업의 경우, |
팁
응답 변수를 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
팁
응답 변수는 NaN
을 포함해서는 안 됩니다. 예측 변수 데이터에 NaN
이 포함되어 있는 경우, 이 값이 훈련 끝까지 전파됩니다. 그러나 대부분의 경우 훈련이 수렴하지 않습니다.
layers
— 신경망 계층
Layer
배열 | LayerGraph
객체
신경망 계층으로, Layer
배열 또는 LayerGraph
객체로 지정됩니다.
모든 계층이 순차적으로 연결된 신경망을 만들려면 입력 인수로 Layer
배열을 사용하면 됩니다. 이 경우, 반환되는 신경망은 SeriesNetwork
객체입니다.
DAG(유방향 비순환 그래프) 신경망은 계층이 여러 개의 입력값과 출력값을 가질 수 있는 복잡한 구조를 갖습니다. DAG 신경망을 만들려면 신경망 아키텍처를 LayerGraph
객체로 지정한 다음 해당 계층 그래프를 trainNetwork
에 대한 입력 인수로 사용하십시오.
trainNetwork
함수는 최대 하나의 시퀀스 입력 계층을 갖는 신경망을 지원합니다.
내장 계층 목록은 딥러닝 계층 목록 항목을 참조하십시오.
options
— 훈련 옵션
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
훈련 옵션으로, trainingOptions
함수가 반환하는 TrainingOptionsSGDM
, TrainingOptionsRMSProp
또는 TrainingOptionsADAM
객체로 지정됩니다.
출력 인수
net
— 훈련된 신경망
SeriesNetwork
객체 | DAGNetwork
객체
훈련된 신경망으로, SeriesNetwork
객체 또는 DAGNetwork
객체로 반환됩니다.
Layer
배열을 사용하여 신경망을 훈련시키는 경우, net
은 SeriesNetwork
객체가 됩니다. LayerGraph
객체를 사용하여 신경망을 훈련시키는 경우, net
은 DAGNetwork
객체가 됩니다.
info
— 훈련 정보
구조체
훈련 정보로, 구조체로 반환됩니다. 여기서 각 필드는 스칼라 또는 훈련 반복 1회당 하나의 요소를 가진 숫자형 벡터입니다.
분류 작업의 경우, info
는 다음 필드를 포함합니다.
TrainingLoss
— 손실 함수 값TrainingAccuracy
— 훈련 정확도ValidationLoss
— 손실 함수 값ValidationAccuracy
— 검증 정확도BaseLearnRate
— 학습률FinalValidationLoss
— 반환된 신경망의 검증 손실FinalValidationAccuracy
— 반환된 신경망의 검증 정확도OutputNetworkIteration
— 반환된 신경망의 반복 횟수
회귀 작업의 경우, info
는 다음 필드를 포함합니다.
TrainingLoss
— 손실 함수 값TrainingRMSE
— 훈련 RMSE 값ValidationLoss
— 손실 함수 값ValidationRMSE
— 검증 RMSE 값BaseLearnRate
— 학습률FinalValidationLoss
— 반환된 신경망의 검증 손실FinalValidationRMSE
— 반환된 신경망의 검증 RMSEOutputNetworkIteration
— 반환된 신경망의 반복 횟수
options
가 검증 데이터를 지정하는 경우에는 구조체가 ValidationLoss
, ValidationAccuracy
, ValidationRMSE
, FinalValidationLoss
, FinalValidationAccuracy
, FinalValidationRMSE
필드만 포함합니다. ValidationFrequency
훈련 옵션은 소프트웨어가 어느 반복에서 검증 메트릭을 계산할지 결정합니다. 최종 검증 메트릭은 스칼라입니다. 그 외 다른 구조체 필드는 행 벡터로, 각 요소가 한 번의 훈련 반복에 대응됩니다. 소프트웨어가 검증 메트릭을 계산하지 않는 반복의 경우, 구조체에서 대응되는 값은 NaN
입니다.
배치 정규화 계층을 포함하는 신경망은 BatchNormalizationStatistics
훈련 옵션이 'population'
인 경우 최종 검증 메트릭이 훈련 중에 계산된 검증 메트릭과 다른 경우가 종종 있습니다. 최종 신경망의 배치 정규화 계층은 훈련 중일 때와 다른 연산을 수행하기 때문입니다. 자세한 내용은 batchNormalizationLayer
를 참조하십시오.
세부 정보
검사 지점 신경망을 저장하고 훈련 재개하기
Deep Learning Toolbox™를 사용하면 훈련 중에 신경망을 .mat 파일로 저장할 수 있습니다. 신경망 또는 데이터 세트의 규모가 커서 훈련시키는 데 오래 걸리는 경우에는 이와 같이 주기적으로 저장하는 것이 특히 유용합니다. 어떤 이유로 훈련이 중단된 경우, 마지막으로 저장된 검사 지점 신경망에서부터 훈련을 재개할 수 있습니다. trainNetwork
가 검사 지점 신경망을 저장하도록 하려면 trainingOptions
의 CheckpointPath
옵션을 사용하여 경로의 이름을 지정해야 합니다. 지정한 경로가 존재하지 않는 경우, trainingOptions
는 오류를 반환합니다.
trainNetwork
는 검사 지점 신경망 파일에 자동으로 고유한 이름을 할당합니다. net_checkpoint__351__2018_04_12__18_09_52.mat
라는 예제 이름에서 351은 반복 횟수이고, 2018_04_12
는 날짜이고, 18_09_52
는 trainNetwork
가 신경망을 저장한 시간입니다. 검사 지점 신경망 파일은 파일을 더블 클릭하거나 명령줄에서 load 명령을 사용하여 불러올 수 있습니다. 예를 들면 다음과 같습니다.
load net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork
에 대한 입력 인수로 신경망의 계층을 사용하여 훈련을 재개할 수 있습니다. 예를 들면 다음과 같이 합니다.trainNetwork(XTrain,TTrain,net.Layers,options)
부동소수점 연산방식
trainNetwork
함수를 사용하여 신경망을 훈련시키거나 DAGNetwork
객체 및 SeriesNetwork
객체와 함께 예측 함수 또는 검증 함수를 사용할 때 소프트웨어는 단정밀도 부동소수점 연산방식을 사용하여 이러한 계산을 수행합니다. 훈련, 예측 및 검증을 위한 함수는 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
확장 기능
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
계산을 병렬로 실행하려면 'ExecutionEnvironment'
옵션을 'multi-gpu'
또는 'parallel'
로 설정하십시오.
trainingOptions
를 사용하여 'ExecutionEnvironment'
를 설정하고 trainNetwork
에 options
를 입력합니다. 'ExecutionEnvironment'
를 설정하지 않으면 trainNetwork
는 GPU를 사용할 수 있는 경우 GPU에서 실행됩니다.
자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
메모리 부족 오류를 방지하려면 대규모 학습 데이터 세트를 GPU로 이동하지 않는 것이 좋습니다. 대신
trainingOptions
를 사용하여'ExecutionEnvironment'
를"auto"
또는"gpu"
로 설정하고options
를trainNetwork
에 제공하여 신경망을 GPU에서 훈련시키십시오.입력 데이터가 다음과 같은 경우
ExecutionEnvironment
옵션은"auto"
또는"gpu"
여야 합니다.gpuArray
gpuArray
객체를 포함하는 셀형 배열gpuArray
객체를 포함하는 테이블gpuArray
객체를 포함하는 셀형 배열을 출력하는 데이터저장소gpuArray
객체를 포함하는 테이블을 출력하는 데이터저장소
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2016a에 개발됨R2022b: trainNetwork
는 SequenceLength
훈련 옵션을 정수로 지정한 경우 분할하기 전에 미니 배치를 가장 긴 시퀀스의 길이에 맞춰 채움
R2022b부터, trainNetwork
함수를 사용하여 시퀀스 데이터로 신경망을 훈련시킬 때 SequenceLength
옵션이 정수인 경우, 각 미니 배치에서 가장 긴 시퀀스의 길이에 맞춰 시퀀스들을 채운 다음 이들 시퀀스를 지정된 시퀀스 길이를 갖는 미니 배치로 분할합니다. 미니 배치의 시퀀스 길이가 SequenceLength
로 균등하게 나뉘지 않는 경우, 마지막 분할 미니 배치의 길이는 SequenceLength
보다 짧습니다. 이 동작은 채우기 값만 포함하는 시간 스텝에서 신경망이 훈련되는 것을 방지합니다.
이전 릴리스에서는, 미니 배치의 길이보다 크거나 같은 SequenceLength
의 가장 가까운 배수에 해당하는 길이가 되도록 미니 배치 시퀀스들을 채운 다음 데이터를 분할합니다. 이 동작을 재현하려면 데이터의 미니 배치를 전처리할 때 사용자 지정 훈련 루프를 사용하여 이 동작을 구현하십시오.
R2021b: trainNetwork
는 손실이 NaN
일 때 자동으로 훈련을 중지함
trainNetwork
함수를 사용하여 신경망을 훈련시킬 때, 손실이 NaN
이면 훈련이 자동으로 중지됩니다. 일반적으로 손실 값이 NaN
이면 신경망 학습 가능한 파라미터에 NaN
값이 도입됩니다. 이렇게 되면 결과적으로 신경망이 훈련에 실패하거나 유효한 예측을 하지 못할 수 있습니다. 이 변경은 훈련을 완료하기 전에 신경망에 있는 문제를 인식하는 데 도움이 됩니다.
이전 릴리스에서는 손실이 NaN
일 때에도 신경망 훈련을 계속 진행합니다.
R2021a: MAT 파일 경로의 테이블 지정에 대한 지원 제거 예정
trainNetwork
함수에 대한 시퀀스 데이터를 지정할 때 MAT 파일 경로의 테이블을 지정하는 것에 대한 지원이 향후 릴리스에서 제거될 예정입니다.
메모리에 맞지 않는 시퀀스를 사용해 신경망을 훈련시키려면 데이터저장소를 사용하십시오. 데이터저장소를 사용하여 데이터를 읽어 들인 다음 transform
함수를 사용하여 데이터저장소 출력값을 trainNetwork
함수에 필요한 형식으로 변환할 수 있습니다. 예를 들어, FileDatastore
객체 또는 TabularTextDatastore
객체를 사용하여 데이터를 읽어 들인 다음 transform
함수를 사용하여 출력값을 변환할 수 있습니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)