trainnet
구문
설명
는 netTrained = trainnet(images,net,lossFcn,options)images로 지정된 영상과 목표값 및 options로 정의된 훈련 옵션을 사용하여 영상 작업에 대해 net로 지정된 신경망을 훈련시킵니다.
는 netTrained = trainnet(sequences,net,lossFcn,options)sequences로 지정된 시퀀스와 목표값을 사용하여 시퀀스 또는 시계열 작업(예: LSTM 또는 GRU 신경망)에 대해 신경망을 훈련시킵니다.
는 netTrained = trainnet(features,net,lossFcn,options)features로 지정된 특징 데이터와 목표값을 사용하여 특징 작업(예: 다층 퍼셉트론(MLP) 신경망)에 대해 신경망을 훈련시킵니다.
는 다른 데이터 레이아웃이나 서로 다른 데이터 유형을 조합하여 신경망을 훈련시킵니다.netTrained = trainnet(data,net,lossFcn,options)
[는 위에 열거된 구문 중 하나를 사용하여 훈련에 대한 정보도 반환합니다.netTrained,info] = trainnet(___)
예제
영상 데이터 세트가 있는 경우 영상 입력 계층을 사용하여 심층 신경망을 훈련시킬 수 있습니다.
샘플 숫자 데이터의 압축을 풀고 영상 데이터저장소를 만듭니다. imageDatastore 함수는 폴더 이름을 기준으로 영상에 자동으로 레이블을 지정합니다.
unzip("DigitsData.zip") imds = imageDatastore("DigitsData", ... IncludeSubfolders=true, ... LabelSource="foldernames");
훈련 세트의 각 범주에 750개 영상이 포함되고 테스트 세트에 각 레이블의 나머지 영상이 포함되도록 데이터를 훈련 데이터 세트와 테스트 데이터 세트로 나눕니다. splitEachLabel은 영상 데이터저장소를 훈련 및 테스트를 위한 2개의 새로운 데이터저장소로 분할합니다.
numTrainFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainFiles,"randomized");컨벌루션 신경망 아키텍처를 정의합니다. 신경망 입력 계층의 영상 크기와 마지막 완전 연결 계층의 클래스 개수를 지정합니다. 각 영상은 28×28×1 픽셀입니다.
inputSize = [28 28 1];
classNames = categories(imds.Labels);
numClasses = numel(classNames);
layers = [
imageInputLayer(inputSize)
convolution2dLayer(5,20)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];훈련 옵션을 지정합니다.
SGDM 솔버를 사용하여 훈련시킵니다.
훈련을 Epoch 4회 수행합니다.
훈련 진행 상황을 플롯에서 모니터링하고 정확도 메트릭을 모니터링합니다.
상세 출력값을 비활성화합니다.
options = trainingOptions("sgdm", ... MaxEpochs=4, ... Verbose=false, ... Plots="training-progress", ... Metrics="accuracy");
신경망을 훈련시킵니다. 분류에는 교차 엔트로피 손실을 사용합니다.
net = trainnet(imdsTrain,layers,"crossentropy",options);
레이블이 지정된 테스트 세트를 사용하여 신경망을 테스트합니다. 단일 레이블 분류의 경우 정확도를 평가합니다. 정확도는 신경망이 올바르게 예측하는 레이블의 비율입니다.
accuracy = testnet(net,imdsTest,"accuracy")accuracy = 98.2400
훈련된 신경망을 사용하여 분류 점수를 예측한 다음 scores2label 함수를 사용하여 레이블을 예측값으로 변환합니다.
scoresTest = minibatchpredict(net,imdsTest); YTest = scores2label(scoresTest,classNames);
예측값을 혼동행렬 차트로 시각화합니다.
confusionchart(imdsTest.Labels,YTest)

숫자형 특징으로 구성된 데이터 세트(예: 공간 차원 또는 시간 차원이 없는 테이블 형식 데이터)가 있는 경우, 특징 입력 계층을 사용하여 심층 신경망을 훈련시킬 수 있습니다.
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개 있습니다.
categoricalPredictorNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalPredictorNames,"categorical");
범주형 입력 변수를 루프를 사용해 순환합니다. 각 변수에 대해 onehotencode 함수를 사용하여 categorical형 값을 one-hot 형식으로 인코딩된 벡터로 변환합니다.
for i = 1:numel(categoricalPredictorNames) name = categoricalPredictorNames(i); tbl.(name) = onehotencode(tbl.(name),2); end
테이블의 처음 몇 개 행을 봅니다. 범주형 예측 변수가 여러 개의 열로 분할된 것을 볼 수 있습니다.
head(tbl)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis SensorCondition ShaftCondition 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 = 2×1 cell
{'No Tooth Fault'}
{'Tooth Fault' }
테스트를 위해 데이터를 남겨 둡니다. 데이터의 85%가 포함된 훈련 세트와 데이터의 나머지 15%가 포함된 테스트 세트로 데이터를 분할합니다. 데이터를 분할하려면 이 예제에 지원 파일로 첨부된 trainingPartitions 함수를 사용합니다. 이 파일에 액세스하려면 이 예제를 라이브 스크립트로 여십시오.
numObservations = size(tbl,1); [idxTrain,idxTest] = trainingPartitions(numObservations,[0.85 0.15]); tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
데이터를 trainnet 함수가 지원하는 형식으로 변환합니다. 예측 변수와 목표값을 각각 숫자형 배열과 categorical형 배열로 변환합니다. 특징 입력값의 경우, 신경망은 행이 관측값에 대응하고 열이 특징에 대응하도록 구성된 데이터가 필요합니다. 데이터가 이러한 레이아웃이 아니라면 데이터를 전처리해서 이러한 레이아웃을 갖도록 만들거나 데이터 형식을 사용하여 레이아웃 정보를 제공할 수 있습니다. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
predictorNames = ["SigMean" "SigMedian" "SigRMS" "SigVar" "SigPeak" "SigPeak2Peak" ... "SigSkewness" "SigKurtosis" "SigCrestFactor" "SigMAD" "SigRangeCumSum" ... "SigCorrDimension" "SigApproxEntropy" "SigLyapExponent" "PeakFreq" ... "HighFreqPower" "EnvPower" "PeakSpecKurtosis" "SensorCondition" "ShaftCondition"]; XTrain = table2array(tblTrain(:,predictorNames)); TTrain = tblTrain.(labelName); XTest = table2array(tblTest(:,predictorNames)); TTest = tblTest.(labelName);
특징 입력 계층을 갖는 신경망을 정의하고 특징 개수를 지정합니다. 또한, Z-점수 정규화를 사용하여 데이터를 정규화하도록 입력 계층을 구성합니다.
numFeatures = size(XTrain,2);
numClasses = numel(classNames);
layers = [
featureInputLayer(numFeatures,Normalization="zscore")
fullyConnectedLayer(16)
layerNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];다음과 같이 훈련 옵션을 지정합니다.
L-BFGS 솔버를 사용하여 훈련시킵니다. 이 솔버는 신경망이 작고 데이터가 메모리에 들어가는 정도의 크기인 작업에 적합합니다.
CPU를 사용하여 훈련시킵니다. 신경망과 데이터가 작으므로 CPU가 더 적절합니다.
훈련 진행 상황을 플롯으로 표시합니다.
세부 정보가 출력되지 않도록 합니다.
options = trainingOptions("lbfgs", ... ExecutionEnvironment="cpu", ... Plots="training-progress", ... Verbose=false);
trainnet 함수를 사용하여 신경망을 훈련시킵니다. 분류에는 교차 엔트로피 손실을 사용합니다.
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
레이블이 지정된 테스트 세트를 사용하여 신경망을 테스트합니다. 단일 레이블 분류의 경우 정확도를 평가합니다. 정확도는 신경망이 올바르게 예측하는 레이블의 비율입니다.
accuracy = testnet(net,XTest,TTest,"accuracy")accuracy = 100
훈련된 신경망을 사용하여 테스트 데이터의 레이블을 예측합니다. 훈련된 신경망을 사용하여 분류 점수를 예측한 다음 scores2label 함수를 사용하여 예측값을 레이블로 변환합니다.
scoresTest = minibatchpredict(net,XTest); YTest = scores2label(scoresTest,classNames);
예측값을 혼동행렬 차트로 시각화합니다.
confusionchart(TTest,YTest)

입력 인수
데이터
영상 데이터로, 숫자형 배열, dlarray 객체, 데이터저장소, minibatchqueue 객체 또는 categorical형 배열로 지정됩니다.
팁
비디오 데이터와 같은 영상 시퀀스의 경우 sequences 입력 인수를 사용하십시오.
메모리에 맞고 데이터 증강과 같은 추가 처리가 필요하지 않은 데이터의 경우 대개 입력 데이터를 숫자형 배열이나 categorical형 배열로 지정하는 것이 가장 쉬운 옵션입니다. 디스크에 저장된 영상 파일로 훈련시키거나 데이터 증강과 같은 처리를 추가로 적용하려는 경우 대개 데이터저장소를 사용하는 것이 가장 쉬운 옵션입니다. 여러 개의 출력값을 갖는 신경망의 경우, TransformedDatastore, CombinedDatastore 또는 minibatchqueue 객체를 사용해야 합니다.
팁
신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어, 영상 분류 신경망에서 영상 표현은 일반적으로 h×w×c 숫자형 배열이어야 합니다. 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 MiniBatchFormat 속성을 지정하거나, 입력 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 입력 데이터를 전처리하는 것보다 더 쉽습니다. InputDataFormats 훈련 옵션과 MiniBatchFormat minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
입력 계층이 없는 신경망의 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 InputDataFormats 속성을 사용하거나, 형식이 지정된 dlarray 객체를 사용해야 합니다.
손실 함수에는 특정 레이아웃의 데이터가 필요합니다. 예를 들어 sequence-to-vector 회귀 신경망의 경우 손실 함수에는 대개 목표 벡터가 1×R 벡터로 표현되어야 합니다. 여기서 R은 응답 변수 개수입니다.
대부분의 데이터저장소와 함수는 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 목표 데이터의 레이아웃이 손실 함수에 필요한 것과 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 TargetDataFormats 속성을 지정하거나, 목표 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 목표 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 목표 데이터를 전처리하는 것보다 더 쉽습니다. TargetDataFormats 훈련 옵션과 TargetDataFormats minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
숫자형 배열 또는 dlarray 객체
메모리에 맞고 증강과 같은 추가 처리가 필요하지 않은 데이터의 경우 영상 데이터 세트를 숫자형 배열이나 dlarray 객체로 지정할 수 있습니다. 영상을 숫자형 배열이나 dlarray 객체로 지정하는 경우 targets 인수도 지정해야 합니다.
숫자형 배열과 형식이 지정되지 않은 dlarray 객체의 레이아웃은 영상 데이터 유형에 따라 다르며, InputDataFormats 훈련 옵션과 일치해야 합니다.
대부분의 신경망에는 다음 레이아웃의 영상 데이터가 필요합니다.
| 데이터 | 레이아웃 |
|---|---|
| 2차원 영상 | h×w×c×N 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수이고 N은 영상 개수입니다. 이 레이아웃의 데이터는 |
| 3차원 영상 | h×w×d×c×N 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수이고 N은 영상 개수입니다. 이 레이아웃의 데이터는 |
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
categorical형 배열 (R2025a 이후)
메모리에 맞고 추가 처리가 필요하지 않은 categorical형 값의 영상(예: 레이블이 지정된 픽셀 맵)인 경우 영상을 categorical형 배열로 지정할 수 있습니다.
영상을 categorical형 배열로 지정하면 targets 인수도 지정해야 합니다.
categorical형 입력값은 자동으로 숫자형 값으로 변환되고 신경망에 전달됩니다. categorical형 입력값이 숫자형 값으로 변환되는 방식을 지정하려면 훈련 옵션 함수의 CategoricalInputEncoding 인수를 사용하십시오. categorical형 배열의 레이아웃은 영상 데이터의 유형에 따라 다르며, 훈련 옵션 함수의 InputDataFormats 인수와 일치해야 합니다.
대부분의 신경망에서는 categorical형 영상 데이터가 다음 표에 나와 있는 레이아웃으로 trainnet 함수에 전달되어야 합니다.
| 데이터 | 레이아웃 |
|---|---|
| 2차원 categorical형 영상 | h×w×1×N 배열로, 여기서 h와 w는 각각 영상의 높이와 너비이고 N은 영상 개수입니다. 이 데이터가 숫자형 배열로 변환되면 이 레이아웃의 데이터는 |
| 3차원 categorical형 영상 | h×w×d×1×N 배열로, 여기서 h, w, d는 각각 영상의 높이와 너비, 깊이이고 N은 영상 개수입니다. 이 레이아웃의 데이터는 |
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
데이터저장소
데이터저장소는 영상 및 목표값의 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 증강 또는 변환을 적용하려는 경우에 가장 적합합니다.
영상 데이터에 대해 trainnet 함수는 다음 데이터저장소를 지원합니다.
| 데이터저장소 | 설명 | 대표적인 사용법 |
|---|---|---|
ImageDatastore | 디스크에 저장된 영상의 데이터저장소. | 디스크에 저장된 같은 크기의 영상들을 사용하여 영상 분류 신경망을 훈련시킵니다. 영상 크기가 서로 다른 경우
|
augmentedImageDatastore | 크기 조정, 회전, 반사, 전단, 평행 이동을 비롯한 무작위 아핀 기하 변환을 적용하는 데이터저장소. |
|
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
|
randomPatchExtractionDatastore (Image Processing Toolbox) | 영상 또는 픽셀 레이블 영상으로부터 임의 부분의 쌍을 추출하고 선택적으로 이러한 부분의 쌍에 동일한 무작위 아핀 기하 변환을 적용하는 데이터저장소. | 객체 검출을 위해 신경망을 훈련시킵니다. |
denoisingImageDatastore (Image Processing Toolbox) | 무작위로 생성된 가우스 잡음을 적용하는 데이터저장소. | 영상 잡음 제거를 위해 신경망을 훈련시킵니다. |
| 사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 레이아웃의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. |
목표값을 지정하려면 데이터저장소가 numInputs+numOutputs개 열을 갖는 셀형 배열 또는 테이블을 반환해야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 열은 신경망 입력값에 해당합니다. 마지막 numOutput개 열은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
팁
ImageDatastore객체는 프리페치 방식을 사용해 JPG 또는 PNG 영상 파일을 배치로 읽어올 수 있습니다. 영상의 크기 조정을 비롯하여 딥러닝에 사용할 영상을 효율적으로 전처리하려면augmentedImageDatastore객체를 사용하십시오.ImageDatastore객체의ReadFcn속성을 사용하지 마십시오.ReadFcn속성을 사용자 지정 함수로 설정하면ImageDatastore객체가 영상 파일을 프리페치 방식으로 가져오지 않으며, 이 경우 일반적으로 속도가 상당히 느려집니다.최상의 성능을 위해,
ReadSize속성을 갖는 데이터저장소(예:imageDatastore)를 사용하여 신경망을 훈련시키는 경우ReadSize속성과MiniBatchSize훈련 옵션을 동일한 값으로 설정하십시오.MiniBatchSize속성을 갖는 데이터저장소(예:augmentedImageDatastore)를 사용하여 신경망을 훈련시키는 경우 데이터저장소의MiniBatchSize속성과MiniBatchSize훈련 옵션을 동일한 값으로 설정하십시오.
transform 함수와 combine 함수를 사용하여 딥러닝 신경망 테스트를 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainnet 함수에 필요한 레이아웃으로 변환할 수 있습니다. 데이터저장소 출력값의 필요한 레이아웃은 신경망 아키텍처에 따라 다릅니다. 자세한 내용은 데이터저장소 사용자 지정 항목을 참조하십시오.
minibatchqueue 객체 (R2024a 이후)
미니 배치가 처리되고 변환되는 방법을 더 정밀하게 제어하려면, 예측 변수와 목표값을 반환하는 minibatchqueue 객체로 데이터를 지정하면 됩니다.
데이터를 minibatchqueue 객체로 지정하면 trainnet 함수는 객체의 MiniBatchSize 속성을 무시하고 대신 MiniBatchSize 훈련 옵션을 사용합니다.
목표값을 지정하려면 minibatchqueue가 numInputs+numOutputs개의 출력값을 가져야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 출력값은 신경망 입력값에 해당합니다. 마지막 numOutput개 출력값은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
참고
이 인수는 복소수 값 예측 변수와 목표값을 지원합니다.
시퀀스 또는 시계열 데이터로, 숫자형 배열, 숫자형 배열로 구성된 셀형 배열, dlarray 객체, dlarray객체로 구성된 셀형 배열, 데이터저장소 또는 minibatchqueue 객체로 지정됩니다.
메모리에 맞고 추가 처리가 필요하지 않은 같은 길이의 시퀀스가 있는 경우 보통 입력 데이터를 숫자형 배열로 지정하는 것이 가장 쉬운 옵션입니다. 메모리에 맞고 추가 처리가 필요하지 않은 서로 다른 길이의 시퀀스가 있는 경우 보통 숫자형 배열로 구성된 셀형 배열로 입력 데이터를 지정하는 것이 가장 쉬운 옵션입니다. 디스크에 저장된 시퀀스를 사용하여 훈련시키거나 사용자 지정 변환과 같은 처리를 추가로 적용하려는 경우 일반적으로 데이터저장소를 사용하는 것이 가장 쉬운 옵션입니다. 여러 개의 입력값을 갖는 신경망의 경우, TransformedDatastore 또는 CombinedDatastore 객체를 사용해야 합니다.
팁
신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어 벡터 시퀀스 분류 신경망에서 벡터 시퀀스 표현은 일반적으로 t×c 배열이어야 합니다. 여기서 t와 c는 각각 시퀀스의 시간 스텝 개수와 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 MiniBatchFormat 속성을 지정하거나, 입력 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 입력 데이터를 전처리하는 것보다 더 쉽습니다. InputDataFormats 훈련 옵션과 MiniBatchFormat minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
입력 계층이 없는 신경망의 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 InputDataFormats 속성을 사용하거나, 형식이 지정된 dlarray 객체를 사용해야 합니다.
손실 함수에는 특정 레이아웃의 데이터가 필요합니다. 예를 들어 sequence-to-vector 회귀 신경망의 경우 손실 함수에는 대개 목표 벡터가 1×R 벡터로 표현되어야 합니다. 여기서 R은 응답 변수 개수입니다.
대부분의 데이터저장소와 함수는 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 목표 데이터의 레이아웃이 손실 함수에 필요한 것과 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 TargetDataFormats 속성을 지정하거나, 목표 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 목표 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 목표 데이터를 전처리하는 것보다 더 쉽습니다. TargetDataFormats 훈련 옵션과 TargetDataFormats minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
숫자형 배열, categorical형 배열, dlarray 객체 또는 셀형 배열
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 데이터의 경우 단일 시퀀스를 숫자형 배열, categorical형 배열 또는 dlarray 객체로 지정하거나 시퀀스 데이터 세트를 숫자형 배열, categorical형 배열 또는 dlarray 객체로 구성된 셀형 배열로 지정할 수 있습니다. 시퀀스를 숫자형 배열, categorical형 배열, 셀형 배열 또는 dlarray 객체로 지정하는 경우 targets 인수도 지정해야 합니다.
셀형 배열 입력값의 경우 셀형 배열은 숫자형 배열, categorical형 배열 또는 dlarray 객체로 구성된 N×1 셀형 배열이어야 합니다. 여기서 N은 관측값 개수입니다.
categorical형 입력값은 자동으로 숫자형 값으로 변환되고 신경망에 전달됩니다. categorical형 입력값이 숫자형 값으로 변환되는 방식을 지정하려면 훈련 옵션 함수의 CategoricalInputEncoding 인수를 사용하십시오.
시퀀스를 나타내는 숫자형 배열, categorical형 배열 또는 dlarray 객체의 크기와 형태는 시퀀스 데이터의 유형에 따라 달라지며 InputDataFormats 훈련 옵션과 일치해야 합니다.
시퀀스 입력 계층이 있는 대부분의 신경망에서는 시퀀스 데이터가 다음 표에 나와 있는 레이아웃으로 trainnet 함수에 전달되어야 합니다.
| 데이터 | 레이아웃 |
|---|---|
| 벡터 시퀀스 | s×c 행렬. 여기서 s와 c는 각각 시퀀스의 시간 스텝 개수와 채널(특징) 개수입니다. |
| categorical형 벡터 시퀀스 | s×1 categorical형 배열. 여기서 s는 시퀀스의 시간 스텝 개수입니다. |
| 1차원 영상 시퀀스 | h×c×s 배열. 여기서 h, c는 각각 영상의 높이, 채널 개수이고 s는 시퀀스 길이입니다. |
| categorical형 1차원 영상 시퀀스 | h×1×s categorical형 배열. 여기서 h는 영상의 높이이고 s는 시퀀스 길이입니다. |
| 2차원 영상 시퀀스 | h×w×c×s 배열. 여기서 h, w, c는 영상의 높이, 너비, 채널 개수이고 s는 시퀀스 길이입니다. |
| categorical형 2차원 영상 시퀀스 | h×-w×1×s 배열. 여기서 h와 w는 각각 영상의 높이와 너비이고 s는 시퀀스 길이입니다. |
| 3차원 영상 시퀀스 | h×w×d×c×s 배열. 여기서 h, w, d, c는 3차원 영상의 높이, 너비, 깊이, 채널 개수이고 s는 시퀀스 길이입니다. |
| categorical형 3차원 영상 시퀀스 | h×w×d×1×s. 여기서 h, w, d는 각각 3차원 영상의 높이와 너비, 깊이이고 s는 시퀀스 길이입니다. |
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
데이터저장소
데이터저장소는 시퀀스 및 목표값의 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 변환을 적용하려는 경우에 가장 적합합니다.
시퀀스 및 시계열 데이터에 대해 trainnet 함수는 다음 데이터저장소를 지원합니다.
| 데이터저장소 | 설명 | 대표적인 사용법 |
|---|---|---|
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. | 서로 다른 데이터 소스의 예측 변수와 목표값을 결합합니다. |
| 사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 레이아웃의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. |
목표값을 지정하려면 데이터저장소가 numInputs+numOutputs개 열을 갖는 셀형 배열 또는 테이블을 반환해야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 열은 신경망 입력값에 해당합니다. 마지막 numOutput개 열은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
transform 함수와 combine 함수를 사용하여 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainnet 함수에 필요한 레이아웃으로 변환할 수 있습니다. 예를 들어, 각각 ArrayDatastore 객체 및 TabularTextDatastore 객체를 사용하여 메모리 내 배열 및 CSV 파일에서 읽어 들인 데이터를 변환하고 결합할 수 있습니다. 데이터저장소 출력값의 필요한 레이아웃은 신경망 아키텍처에 따라 다릅니다. 자세한 내용은 데이터저장소 사용자 지정 항목을 참조하십시오.
minibatchqueue 객체 (R2024a 이후)
미니 배치가 처리되고 변환되는 방법을 더 정밀하게 제어하려면, 예측 변수와 목표값을 반환하는 minibatchqueue 객체로 데이터를 지정하면 됩니다.
데이터를 minibatchqueue 객체로 지정하면 trainnet 함수는 객체의 MiniBatchSize 속성을 무시하고 대신 MiniBatchSize 훈련 옵션을 사용합니다.
목표값을 지정하려면 minibatchqueue가 numInputs+numOutputs개의 출력값을 가져야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 출력값은 신경망 입력값에 해당합니다. 마지막 numOutput개 출력값은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
참고
이 인수는 복소수 값 예측 변수와 목표값을 지원합니다.
특징 데이터 또는 테이블 형식 데이터로, 숫자형 배열, 데이터저장소, 테이블 또는 minibatchqueue 객체로 지정됩니다.
메모리에 맞고 추가 처리가 필요하지 않은 데이터의 경우 대개 입력 데이터를 숫자형 배열이나 테이블로 지정하는 것이 가장 쉬운 옵션입니다. 디스크에 저장된 특징 데이터나 테이블 형식 데이터를 사용하여 훈련시키거나 사용자 지정 변환과 같은 처리를 추가로 적용하려는 경우 일반적으로 데이터저장소를 사용하는 것이 가장 쉬운 옵션입니다. 여러 개의 입력값을 갖는 신경망의 경우, TransformedDatastore 또는 CombinedDatastore 객체를 사용해야 합니다.
팁
신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어, 특징 분류 신경망에서 특징 데이터와 테이블 형식 데이터 표현은 일반적으로 1×c 벡터여야 합니다. 여기서 c는 데이터의 특징 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 MiniBatchFormat 속성을 지정하거나, 입력 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 입력 데이터를 전처리하는 것보다 더 쉽습니다. InputDataFormats 훈련 옵션과 MiniBatchFormat minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
입력 계층이 없는 신경망의 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 InputDataFormats 속성을 사용하거나, 형식이 지정된 dlarray 객체를 사용해야 합니다.
손실 함수에는 특정 레이아웃의 데이터가 필요합니다. 예를 들어 sequence-to-vector 회귀 신경망의 경우 손실 함수에는 대개 목표 벡터가 1×R 벡터로 표현되어야 합니다. 여기서 R은 응답 변수 개수입니다.
대부분의 데이터저장소와 함수는 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 목표 데이터의 레이아웃이 손실 함수에 필요한 것과 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 TargetDataFormats 속성을 지정하거나, 목표 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 목표 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 목표 데이터를 전처리하는 것보다 더 쉽습니다. TargetDataFormats 훈련 옵션과 TargetDataFormats minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
숫자형 배열 또는 dlarray 객체
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 특징 데이터의 경우 특징 데이터를 숫자형 배열로 지정할 수 있습니다. 특징 데이터를 숫자형 배열로 지정하는 경우 targets 인수도 지정해야 합니다.
숫자형 배열과 형식이 지정되지 않은 dlarray 객체의 레이아웃은 InputDataFormats 훈련 옵션과 일치해야 합니다. 특징 입력값을 갖는 대부분의 신경망에는 N×numFeatures 배열로 지정된 입력 데이터가 필요합니다. 여기서 N은 관측값의 개수이고 numFeatures는 입력 데이터의 특징 개수입니다.
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
categorical형 배열 (R2025a 이후)
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 이산 특징의 경우 특징 데이터를 categorical형 배열로 지정할 수 있습니다.
특징을 categorical형 배열로 지정하는 경우 targets 인수도 지정해야 합니다.
categorical형 입력값은 자동으로 숫자형 값으로 변환되고 신경망에 전달됩니다. categorical형 입력값이 숫자형 값으로 변환되는 방식을 지정하려면 훈련 옵션 함수의 CategoricalInputEncoding 인수를 사용하십시오. categorical형 배열의 레이아웃은 훈련 옵션 함수의 InputDataFormats 인수와 일치해야 합니다.
범주형 특징 입력값을 갖는 대부분의 신경망에는 N×1 벡터로 지정된 입력 데이터가 필요합니다. 여기서 N은 관측값의 개수입니다. 이 데이터가 숫자형 배열로 변환되면 이 레이아웃의 데이터는 "BC"(배치, 채널) 데이터 형식을 갖습니다. "C"(채널) 차원의 크기는 훈련 옵션 함수의 CategoricalInputEncoding 인수에 따라 다릅니다.
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
테이블 (R2024a 이후)
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 특징 데이터의 경우 특징 데이터를 테이블로 지정할 수 있습니다. 특징 데이터를 테이블로 지정하는 경우 targets 인수를 지정해서는 안 됩니다.
특징 데이터를 테이블로 지정하려면 numObservations개 행과 numFeatures+1개 열이 있는 테이블을 지정하십시오. 여기서 numObservations와 numFeatures는 각각 입력 데이터의 관측값 개수와 특징 개수입니다. trainnet 함수는 첫 번째 numFeatures 열을 입력 특징으로 사용하고 마지막 열을 목표값으로 사용합니다.
데이터저장소
데이터저장소는 특징 데이터 및 목표값의 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 변환을 적용하려는 경우에 가장 적합합니다.
특징 데이터와 테이블 형식 데이터에 대해 trainnet 함수는 다음 데이터저장소를 지원합니다.
| 데이터형 | 설명 | 대표적인 사용법 |
|---|---|---|
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
|
| 사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 레이아웃의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. |
목표값을 지정하려면 데이터저장소가 numInputs+numOutputs개 열을 갖는 셀형 배열 또는 테이블을 반환해야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 열은 신경망 입력값에 해당합니다. 마지막 numOutput개 열은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
transform 함수와 combine 함수를 사용하여 딥러닝 신경망 훈련을 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainnet에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 자세한 내용은 데이터저장소 사용자 지정 항목을 참조하십시오.
minibatchqueue 객체 (R2024a 이후)
미니 배치가 처리되고 변환되는 방법을 더 정밀하게 제어하려면, 예측 변수와 목표값을 반환하는 minibatchqueue 객체로 데이터를 지정하면 됩니다.
데이터를 minibatchqueue 객체로 지정하면 trainnet 함수는 객체의 MiniBatchSize 속성을 무시하고 대신 MiniBatchSize 훈련 옵션을 사용합니다.
목표값을 지정하려면 minibatchqueue가 numInputs+numOutputs개의 출력값을 가져야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 출력값은 신경망 입력값에 해당합니다. 마지막 numOutput개 출력값은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
참고
이 인수는 복소수 값 예측 변수와 목표값을 지원합니다.
일반 데이터 또는 데이터형의 조합으로, 숫자형 배열, dlarray 객체, 데이터저장소 또는 minibatchqueue 객체로 지정됩니다.
메모리에 맞고 추가 처리가 필요하지 않은 데이터의 경우 대개 입력 데이터를 숫자형 배열로 지정하는 것이 가장 쉬운 옵션입니다. 디스크에 저장된 데이터를 사용하여 훈련시키거나 처리를 추가로 적용하려는 경우 일반적으로 데이터저장소를 사용하는 것이 가장 쉬운 옵션입니다. 여러 개의 입력값을 갖는 신경망의 경우, TransformedDatastore 또는 CombinedDatastore 객체를 사용해야 합니다.
팁
신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어 벡터 시퀀스 분류 신경망에서 벡터 시퀀스 표현은 일반적으로 t×c 배열이어야 합니다. 여기서 t와 c는 각각 시퀀스의 시간 스텝 개수와 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 MiniBatchFormat 속성을 지정하거나, 입력 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 입력 데이터를 전처리하는 것보다 더 쉽습니다. InputDataFormats 훈련 옵션과 MiniBatchFormat minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
입력 계층이 없는 신경망의 경우 InputDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 InputDataFormats 속성을 사용하거나, 형식이 지정된 dlarray 객체를 사용해야 합니다.
손실 함수에는 특정 레이아웃의 데이터가 필요합니다. 예를 들어 sequence-to-vector 회귀 신경망의 경우 손실 함수에는 대개 목표 벡터가 1×R 벡터로 표현되어야 합니다. 여기서 R은 응답 변수 개수입니다.
대부분의 데이터저장소와 함수는 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 목표 데이터의 레이아웃이 손실 함수에 필요한 것과 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 TargetDataFormats 속성을 지정하거나, 목표 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 목표 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 목표 데이터를 전처리하는 것보다 더 쉽습니다. TargetDataFormats 훈련 옵션과 TargetDataFormats minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
숫자형 배열, categorical형 배열 또는 dlarray 객체
메모리에 맞고 사용자 지정 변환과 같은 추가 처리가 필요하지 않은 데이터의 경우 데이터를 숫자형 배열, categorical형 배열 또는 dlarray 객체로 지정할 수 있습니다. 데이터를 숫자형 배열로 지정하는 경우 targets 인수도 지정해야 합니다.
inputLayer 객체가 있는 신경망의 경우 필요한 입력 데이터 레이아웃은 계층의 InputFormat 속성으로 지정됩니다.
categorical형 입력값은 자동으로 숫자형 값으로 변환되고 신경망에 전달됩니다. categorical형 입력값이 숫자형 값으로 변환되는 방식을 지정하려면 훈련 옵션 함수의 CategoricalInputEncoding 인수를 사용하십시오. categorical형 배열의 레이아웃은 훈련 옵션 함수의 InputDataFormats 인수와 일치해야 합니다.
데이터의 레이아웃이 다른 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
데이터저장소
데이터저장소는 데이터 및 목표값의 배치를 읽어 들입니다. 데이터저장소는 메모리에 맞지 않는 데이터가 있거나 데이터에 변환을 적용하려는 경우에 가장 적합합니다.
일반 데이터 또는 데이터형의 조합에 대해 trainnet 함수는 다음 데이터저장소를 지원합니다.
| 데이터형 | 설명 | 대표적인 사용법 |
|---|---|---|
TransformedDatastore | 사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소. |
|
CombinedDatastore | 둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소. |
|
| 사용자 지정 미니 배치 데이터저장소 | 데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소. | 다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 신경망을 훈련시킵니다. 자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오. |
목표값을 지정하려면 데이터저장소가 numInputs+numOutputs개 열을 갖는 셀형 배열 또는 테이블을 반환해야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 열은 신경망 입력값에 해당합니다. 마지막 numOutput개 열은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
transform 함수와 combine 함수를 사용하여 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 trainnet 함수에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 자세한 내용은 데이터저장소 사용자 지정 항목을 참조하십시오.
minibatchqueue 객체 (R2024a 이후)
미니 배치가 처리되고 변환되는 방법을 더 정밀하게 제어하려면, 예측 변수와 목표값을 반환하는 minibatchqueue 객체로 데이터를 지정하면 됩니다.
데이터를 minibatchqueue 객체로 지정하면 trainnet 함수는 객체의 MiniBatchSize 속성을 무시하고 대신 MiniBatchSize 훈련 옵션을 사용합니다.
목표값을 지정하려면 minibatchqueue가 numInputs+numOutputs개의 출력값을 가져야 합니다. 여기서 numInputs와 numOutputs는 각각 신경망 입력값과 신경망 출력값의 개수입니다. 처음 numInputs개 출력값은 신경망 입력값에 해당합니다. 마지막 numOutput개 출력값은 신경망 출력값에 해당합니다. 입력 데이터와 출력 데이터의 순서는 각각 신경망의 InputNames 및 OutputNames 속성에 따라 지정됩니다.
참고
이 인수는 복소수 값 예측 변수와 목표값을 지원합니다.
훈련 목표값으로, categorical형 배열, 숫자형 배열 또는 시퀀스로 구성된 셀형 배열로 지정됩니다.
출력값이 여러 개인 신경망에 대한 목표값을 지정하려면 images, sequences, features 또는 data 인수를 사용하여 목표값을 지정하십시오.
팁
손실 함수에는 특정 레이아웃의 데이터가 필요합니다. 예를 들어 sequence-to-vector 회귀 신경망의 경우 손실 함수에는 대개 목표 벡터가 1×R 벡터로 표현되어야 합니다. 여기서 R은 응답 변수 개수입니다.
대부분의 데이터저장소와 함수는 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 목표 데이터의 레이아웃이 손실 함수에 필요한 것과 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나, 데이터를 minibatchqueue 객체로 지정하고 TargetDataFormats 속성을 지정하거나, 목표 데이터를 형식이 지정된 dlarray 객체로 지정하는 방법으로 목표 데이터의 레이아웃이 다르다는 것을 나타내십시오. 데이터 형식을 지정하는 편이 일반적으로 목표 데이터를 전처리하는 것보다 더 쉽습니다. TargetDataFormats 훈련 옵션과 TargetDataFormats minibatchqueue 속성을 모두 지정하는 경우 두 속성이 일치해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
필요한 목표값 레이아웃은 손실 함수와 작업 유형에 따라 다릅니다. 여기에 나와 있는 목표값은 일부에 불과합니다. 손실 함수는 추가 차원을 갖는 목표값 등 다른 레이아웃의 추가 목표값을 지원할 수 있습니다. 사용자 지정 손실 함수의 경우, 소프트웨어는 신경망 출력 데이터의 형식 정보를 사용하여 목표 데이터의 유형을 결정하고 다음 표의 해당 레이아웃을 적용합니다.
| 손실 함수 | 목표값 | 목표값 레이아웃 |
|---|---|---|
"crossentropy" | categorical형 레이블 | 레이블로 구성된 N×1 categorical형 벡터로, 여기서 N은 관측값의 개수입니다. |
| categorical형 레이블의 시퀀스 |
| |
"index-crossentropy" | categorical형 레이블 | 레이블로 구성된 N×1 categorical형 벡터로, 여기서 N은 관측값의 개수입니다. |
| 클래스 인덱스 | 클래스 인덱스로 구성된 N×1 숫자형 벡터로, 여기서 N은 관측값의 개수입니다. | |
| categorical형 레이블의 시퀀스 |
| |
| 클래스 인덱스 시퀀스 |
| |
"binary-crossentropy" | 이진 레이블(단일 레이블) | N×1 벡터로, 여기서 N은 관측값의 개수입니다. |
| 이진 레이블(다중 레이블) | N×c 행렬로, 여기서 N과 c는 각각 관측값 개수와 클래스 개수입니다. | |
| 숫자형 스칼라 | N×1 벡터로, 여기서 N은 관측값의 개수입니다. |
| 숫자형 벡터 | N×R 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다. | |
| 2차원 영상 | h×w×c×N 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수이고 N은 영상 개수입니다. | |
| 3차원 영상 |
| |
| 스칼라로 구성된 숫자형 시퀀스 |
| |
| 벡터로 구성된 숫자형 시퀀스 |
| |
| 1차원 영상 시퀀스 |
| |
| 2차원 영상 시퀀스 |
| |
| 3차원 영상 시퀀스 |
|
목표값의 레이아웃이 다른 경우 TargetDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 대신 사용하여 목표값의 레이아웃이 다르다는 것을 나타내십시오. 자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
categorical형 목표값은 자동으로 숫자형 값으로 변환되고 손실 함수와 메트릭 함수에 전달됩니다. "index-crossentropy" 손실 함수를 사용하여 훈련시키는 경우 categorical형 목표값은 정수 값으로 변환됩니다. 그 외의 경우, categorical형 목표값은 one-hot 형식으로 인코딩된 벡터로 변환됩니다.
categorical형 목표값이 숫자형 값으로 변환되는 방식을 지정하려면 훈련 옵션 함수의 CategoricalTargetEncoding 인수를 사용하십시오. (R2025a 이후)
팁
목표값을 정규화하면 회귀를 위한 신경망 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
훈련 세부 정보
신경망 아키텍처로, dlnetwork 객체 또는 계층 배열로 지정됩니다.
내장 신경망 계층 목록은 딥러닝 계층 목록 항목을 참조하십시오.
훈련에 사용할 손실 함수로, 다음 값 중 하나로 지정됩니다.
"crossentropy"— 분류 작업에 사용할 교차 엔트로피 손실로, 신경망 출력값의 채널 이외 요소 개수로 나누어 정규화됩니다."index-crossentropy"(R2024b 이후) — 분류 작업에 사용할 인덱스 교차 엔트로피 손실로, 목표값의 요소 개수로 나누어 정규화됩니다. 범주형 클래스가 많을 때 메모리를 절약하려면 이 옵션을 사용하십시오."binary-crossentropy"— 이진 분류 작업 및 다중 레이블 분류 작업에 사용할 이진 교차 엔트로피 손실로, 신경망 출력값의 요수 개수로 나누어 정규화됩니다."mae"/"mean-absolute-error"/"l1loss"— 회귀 작업에 사용할 평균절대오차로, 신경망 출력값의 요수 개수로 나누어 정규화됩니다."mse"/"mean-squared-error"/"l2loss"— 회귀 작업에 사용할 평균제곱오차로, 신경망 출력값의 요수 개수로 나누어 정규화됩니다."huber"— 회귀 작업에 사용할 Huber 손실로, 신경망 출력값의 요수 개수로 나누어 정규화됩니다.구문이
loss = f(Y1,...,Yn,T1,...,Tm)인 함수 핸들로, 여기서Y1,...,Yn은n개의 신경망 예측값에 대응하는dlarray객체이고T1,...,Tm은m개의 목표값에 대응하는dlarray객체입니다.deep.DifferentiableFunction객체 (R2024a 이후) — 사용자 지정 역방향 함수를 갖는 함수 객체.
팁
가중 교차 엔트로피에는 함수 핸들 @(Y,T)crossentropy(Y,T,weights)를 사용하십시오.
사용자 지정 함수를 정의하는 방법에 대한 자세한 내용은 Define Custom Deep Learning Operations 항목을 참조하십시오.
훈련 옵션으로, trainingOptions 함수가 반환하는 TrainingOptionsSGDM, TrainingOptionsRMSProp, TrainingOptionsADAM, TrainingOptionsLBFGS 또는 TrainingOptionsLM 객체로 지정됩니다.
출력 인수
훈련된 신경망으로, dlnetwork 객체로 반환됩니다.
훈련 정보로, 다음과 같은 속성을 가진 TrainingInfo 객체로 반환됩니다.
TrainingHistory— 훈련 반복 정보ValidationHistory— 검증 반복 정보OutputNetworkIteration— 훈련된 신경망에 해당하는 반복StopReason— 훈련이 중지된 이유
info를 사용하여 show 함수와 close 함수를 통해 훈련 진행 상황 플롯을 열고 닫을 수도 있습니다.
세부 정보
기본적으로 trainnet 함수를 사용하여 신경망을 훈련시킬 때 단정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다. trainnet 함수는 단정밀도의 학습 가능 파라미터와 상태 파라미터를 갖는 신경망을 반환합니다.
단정밀도의 학습 가능 파라미터와 상태 파라미터를 갖는 dlnetwork 객체를 예측 함수나 검증 함수에 사용하면, 단정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다.
최상의 성능을 위해 MATLAB®에서 GPU를 사용해 딥러닝을 실행한다고 해도 성능이 반드시 보장되는 것은 아닙니다. 신경망 아키텍처에 따라 GPU를 사용하여 두 개의 같은 신경망을 훈련시키거나 동일한 신경망 및 데이터를 사용하여 두 개의 예측값을 생성할 때 조건에 따라 결과가 달라질 수 있습니다. GPU를 사용하여 딥러닝 연산을 수행할 때 결정성(determinism)이 필요한 경우 deep.gpu.deterministicAlgorithms 함수 (R2024b 이후)를 사용하십시오.
rng 함수를 사용하여 동일한 난수 생성기와 시드값을 설정하는 경우 다음 상황이 아니라면 CPU를 사용하여 훈련을 재현할 수 있습니다.
PreprocessingEnvironment훈련 옵션을"background"또는"parallel"로 설정하는 경우.훈련 데이터가
PreprocessingEnvironment속성이"background"또는"parallel"로 설정된minibatchqueue객체인 경우.
팁
회귀 작업의 경우 목표값을 정규화하면 훈련을 안정화하고 속도를 높이는 데 도움이 되는 경우가 많습니다. 자세한 내용은 회귀를 위해 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.
대부분의 경우, 예측 변수 또는 목표값에
NaN값이 포함되어 있으면 이 값은 신경망을 통해 전파되며 훈련이 수렴하지 않게 됩니다.숫자형 배열을 데이터저장소로 변환하려면,
ArrayDatastore를 사용하십시오.혼합된 데이터형으로 구성된 신경망에서 계층을 결합하는 경우 데이터를 결합 계층(예: 결합 계층 또는 덧셈 계층)으로 전달하기 전에 데이터 형식을 다시 지정해야 할 수 있습니다. 데이터 형식을 다시 지정하려면 평탄화 계층을 사용하여 공간 차원을 채널 차원으로 평탄화하거나 데이터의 형식을 새로 지정하고 형태를 변경하는
FunctionLayer객체 또는 사용자 지정 계층을 만들면 됩니다.
알고리즘
대부분의 데이터저장소는 신경망이 필요로 하는 레이아웃으로 데이터를 출력합니다. 고유한 데이터저장소를 만들거나 데이터저장소에 사용자 지정 변환을 적용하는 경우 데이터저장소가 지원되는 레이아웃으로 데이터를 출력하는지 확인해야 합니다.
주요 사항은 다음 두 가지입니다.
데이터 배치의 구조. 데이터저장소는 관측값에 대응하는 행과 입력값과 목표값에 대응하는 열로 구성된 테이블 또는 셀형 배열을 출력해야 합니다.
예측 변수와 목표값의 레이아웃. 예를 들어, 예측 변수와 목표값은 신경망과 손실 함수에서 지원하는 레이아웃으로 놓여 있어야 합니다.
신경망 훈련에 데이터저장소를 사용하는 경우 데이터저장소 출력값의 구조는 신경망 아키텍처에 따라 다릅니다.
| 신경망 아키텍처 | 데이터저장소 출력값 | 셀형 배열 출력값 예 | 테이블 출력값 예 |
|---|---|---|---|
| 단일 입력 계층 및 단일 출력값 | 두 개의 열로 구성된 테이블 또는 셀형 배열. 첫 번째 열과 두 번째 열은 각각 예측 변수와 목표값을 지정합니다. 테이블 요소는 스칼라 또는 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. | 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]} | 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
|
| 다중 입력 계층 또는 다중 출력값 | ( 처음 입력값과 출력값의 순서는 각각 신경망의 | 2개의 입력값과 2개의 출력값을 갖는 신경망에 대한 셀형 배열. data = read(ds) data =
4×4 cell array
{224×224×3 double} {128×128×3 double} {[2]} {[-42]}
{224×224×3 double} {128×128×3 double} {[2]} {[-15]}
{224×224×3 double} {128×128×3 double} {[9]} {[-24]}
{224×224×3 double} {128×128×3 double} {[9]} {[-44]} | 지원되지 않음 |
데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다.
신경망과 손실 함수에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어 벡터 시퀀스 분류 신경망에서 시퀀스는 일반적으로 t×c 숫자형 배열로 표현되어야 합니다. 여기서 t와 c는 각각 시퀀스의 시간 스텝 개수와 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망과 손실 함수에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망 또는 손실 함수에 필요한 것과 다른 경우 InputDataFormats와 TargetDataFormats 훈련 옵션을 사용하거나 데이터를 형식이 지정된 dlarray 객체로 지정하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 보통 InputDataFormats와 TargetDataFormats 훈련 옵션을 조정하는 편이 입력 데이터를 전처리하는 것보다 쉽습니다.
입력 계층이 없는 신경망의 경우 InputDataFormats 훈련 옵션을 사용하거나 형식이 지정된 dlarray 객체를 사용해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
대부분의 신경망에는 다음의 예측 변수 데이터 레이아웃이 필요합니다.
영상 입력
| 데이터 | 예측 변수 레이아웃 |
|---|---|
| 2차원 영상 | h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다. |
| 3차원 영상 | h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다. |
시퀀스 입력
| 데이터 | 예측 변수 레이아웃 |
|---|---|
| 벡터 시퀀스 | s×c 행렬로, 여기서 s는 시퀀스 길이이고, c는 시퀀스 특징의 개수입니다. |
| 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는 시퀀스 길이입니다. 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
특징 입력값
| 데이터 | 예측 변수 레이아웃 |
|---|---|
| 특징 | c×1 열 벡터로, 여기서 c는 특징의 개수입니다. |
대부분의 손실 함수에는 다음의 목표값 데이터 레이아웃이 필요합니다.
| 목표값 | 목표값 레이아웃 |
|---|---|
| categorical형 레이블 | categorical형 스칼라. |
| categorical형 레이블의 시퀀스 | t×1 categorical형 벡터로, 여기서 t는 시간 스텝 개수입니다. |
| 이진 레이블(단일 레이블) | 숫자형 스칼라 |
| 이진 레이블(다중 레이블) | 1×c 벡터로, 여기서 c는 클래스 개수입니다. |
| 숫자형 스칼라 | 숫자형 스칼라 |
| 숫자형 벡터 | 1×R 벡터로, 여기서 R은 응답 변수 개수입니다. |
| 2차원 영상 | h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다. |
| 3차원 영상 | h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다. |
| 스칼라로 구성된 숫자형 시퀀스 | t×1 벡터로, 여기서 t는 시간 스텝 개수입니다. |
| 벡터로 구성된 숫자형 시퀀스 | t×c 배열로, 여기서 t와 c는 각각 시간 스텝 개수와 채널 개수입니다. |
| 1차원 영상 시퀀스 | h×c×t 배열로, 여기서 h, c, t는 각각 시퀀스의 높이, 채널 개수 및 시간 스텝 개수입니다. |
| 2차원 영상 시퀀스 | h×w×c×t 배열로, 여기서 h, w, c, t는 각각 시퀀스의 높이, 너비, 채널 개수, 시간 스텝 개수입니다. |
| 3차원 영상 시퀀스 | h×w×d×c×t배열로, 여기서 h, w, d, c, t는 각각 시퀀스의 높이, 너비, 깊이, 채널 개수 및 시간 스텝 개수입니다. |
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
확장 기능
이 함수는 GPU 가속을 완전히 지원합니다.
기본적으로 trainnet 함수는 GPU를 사용할 수 있으면 GPU를 사용합니다. trainingOptions 함수를 사용하여 ExecutionEnvironment 훈련 옵션을 설정하는 방법으로 trainnet 함수에 사용할 하드웨어를 지정할 수 있습니다.
자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.
버전 내역
R2023b에 개발됨categorical형 입력 데이터와 목표값은 자동으로 숫자형 값으로 변환되고 각각 신경망과 손실 함수에 전달됩니다. categorical형 입력 데이터와 목표값이 인코딩되는 방식을 지정하려면 각각 trainingOptions 함수의 CategoricalInputEncoding 인수와 CategoricalTargetEncoding 인수를 사용하십시오.
인덱스 교차 엔트로피 손실(희소 교차 엔트로피 손실이라고도 함)은 표준 교차 엔트로피 손실 알고리즘의 대안으로, 메모리와 연산 측면에서 더 효율적입니다. categorical형 목표값을 one-hot 형식으로 인코딩된 벡터로 변환해야 하는 "crossentropy" 손실 함수와 달리 "index-crossentropy" 함수는 categorical형 목표값의 정수 값에 대해 직접 연산을 수행합니다.
인덱스 교차 엔트로피 손실은 많은 클래스를 예측할 때 사용하는 것이 적합한 반면, one-hot 형식으로 인코딩된 데이터는 불필요한 메모리 오버헤드를 발생시킵니다.
인덱스 교차 엔트로피 손실을 지정하려면 lossFcn 인수를 "index-crossentropy"로 지정하십시오.
trainnet 함수는 다음과 같은 장점이 있으며 trainNetwork 함수보다 권장됩니다.
trainnet은 외부 플랫폼에서 만들거나 가져올 수 있는 더 넓은 범위의 신경망 아키텍처를 지원하는dlnetwork객체를 지원합니다.trainnet을 사용하면 손실 함수를 쉽게 지정할 수 있습니다. 내장 손실 함수 중에서 선택하거나 사용자 지정 손실 함수를 지정할 수 있습니다.trainnet은 신경망 구축, 예측, 기본 제공 훈련, 시각화, 압축, 검증, 사용자 지정 훈련 루프를 지원하는 통합 데이터형인dlnetwork객체를 출력합니다.trainnet이trainNetwork보다 일반적으로 더 빠릅니다.
메모리 내 특징 데이터를 minibatchqueue 객체로 지정합니다.
features 인수를 사용하여 메모리 내 특징 데이터를 테이블로 지정합니다.
손실 함수를 deep.DifferentiableFunction 객체로 지정합니다.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)