이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
classify
훈련된 딥러닝 신경망을 사용하여 데이터 분류
구문
설명
CPU 또는 GPU에서 딥러닝을 위해 훈련된 신경망을 사용하여 예측을 수행할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. 하드웨어 요구 사항은 ExecutionEnvironment
이름-값 쌍 인수를 사용하여 지정하십시오.
출력값이 여러 개인 신경망의 경우, predict
를 사용하고 'ReturnCategorical'
옵션을 true
로 설정하십시오.
는 위에 열거된 구문 중 하나를 사용하여 하나 이상의 이름-값 쌍 인수로 지정된 추가 옵션으로 클래스 레이블을 예측합니다.YPred
= classify(___,Name,Value
)
[
는 위에 열거된 구문 중 하나를 사용하여 클래스 레이블에 대응되는 분류 점수도 반환합니다.YPred
,scores
] = classify(___)
팁
서로 다른 길이를 갖는 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오. 미니 배치 크기와 채우기 옵션을 지정하려면 각각 'MiniBatchSize'
옵션과 'SequenceLength'
옵션을 사용하십시오.
예제
훈련된 ConvNet을 사용하여 영상 분류하기
샘플 데이터를 불러옵니다.
[XTrain,YTrain] = digitTrain4DArrayData;
digitTrain4DArrayData
는 숫자 훈련 세트를 4차원 배열 데이터로 불러옵니다. XTrain
은 28×28×1×5,000 배열입니다. 여기서 28은 영상의 높이이고 28은 너비입니다. 1은 채널 개수이고 5,000은 손으로 쓴 숫자를 표시하는 합성 영상의 개수입니다. YTrain
은 각 관측값에 대한 레이블을 포함하는 categorical형 벡터입니다.
컨벌루션 신경망 아키텍처를 생성합니다.
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];
옵션을 모멘텀을 사용한 확률적 경사하강법의 디폴트 설정으로 설정합니다.
options = trainingOptions('sgdm');
신경망을 훈련시킵니다.
rng('default')
net = trainNetwork(XTrain,YTrain,layers,options);
Training on single CPU. Initializing input data normalization. |========================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:00 | 10.16% | 2.3195 | 0.0100 | | 2 | 50 | 00:00:03 | 50.78% | 1.7102 | 0.0100 | | 3 | 100 | 00:00:06 | 63.28% | 1.1632 | 0.0100 | | 4 | 150 | 00:00:09 | 60.16% | 1.0859 | 0.0100 | | 6 | 200 | 00:00:13 | 68.75% | 0.8997 | 0.0100 | | 7 | 250 | 00:00:16 | 76.56% | 0.7919 | 0.0100 | | 8 | 300 | 00:00:19 | 73.44% | 0.8411 | 0.0100 | | 9 | 350 | 00:00:22 | 81.25% | 0.5511 | 0.0100 | | 11 | 400 | 00:00:25 | 89.84% | 0.4741 | 0.0100 | | 12 | 450 | 00:00:29 | 92.19% | 0.3614 | 0.0100 | | 13 | 500 | 00:00:32 | 94.53% | 0.3159 | 0.0100 | | 15 | 550 | 00:00:37 | 96.09% | 0.2543 | 0.0100 | | 16 | 600 | 00:00:40 | 92.19% | 0.2765 | 0.0100 | | 17 | 650 | 00:00:43 | 95.31% | 0.2460 | 0.0100 | | 18 | 700 | 00:00:46 | 99.22% | 0.1418 | 0.0100 | | 20 | 750 | 00:00:49 | 98.44% | 0.1000 | 0.0100 | | 21 | 800 | 00:00:52 | 98.44% | 0.1449 | 0.0100 | | 22 | 850 | 00:00:55 | 98.44% | 0.0989 | 0.0100 | | 24 | 900 | 00:00:58 | 96.88% | 0.1315 | 0.0100 | | 25 | 950 | 00:01:01 | 100.00% | 0.0859 | 0.0100 | | 26 | 1000 | 00:01:05 | 100.00% | 0.0700 | 0.0100 | | 27 | 1050 | 00:01:09 | 100.00% | 0.0759 | 0.0100 | | 29 | 1100 | 00:01:13 | 99.22% | 0.0663 | 0.0100 | | 30 | 1150 | 00:01:18 | 98.44% | 0.0775 | 0.0100 | | 30 | 1170 | 00:01:19 | 99.22% | 0.0732 | 0.0100 | |========================================================================================| Training finished: Reached final iteration.
훈련된 신경망을 테스트 세트에 대해 실행합니다.
[XTest,YTest]= digitTest4DArrayData; YPred = classify(net,XTest);
테스트 데이터에 있는 처음 10개 영상을 표시하고 classify
로 분류한 결과와 비교합니다.
[YTest(1:10,:) YPred(1:10,:)]
ans = 10x2 categorical
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
처음 10개 영상에 대해서는 classify
의 결과가 실제(참) 숫자와 일치합니다.
모든 테스트 데이터에 대해 정확도를 계산합니다.
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9820
훈련된 LSTM 신경망을 사용하여 시퀀스 분류하기
사전 훈련된 신경망을 불러옵니다. JapaneseVowelsNet
은 [1]과 [2]에서 설명한 Japanese Vowels 데이터셋에서 사전 훈련된 LSTM 신경망입니다. 이 데이터 세트는 미니 배치 크기 27을 가지며 시퀀스 길이를 기준으로 정렬된 시퀀스에서 훈련되었습니다.
load JapaneseVowelsNet
신경망 아키텍처를 표시합니다.
net.Layers
ans = 5x1 Layer array with layers: 1 'sequenceinput' Sequence Input Sequence input with 12 dimensions 2 'lstm' LSTM LSTM with 100 hidden units 3 'fc' Fully Connected 9 fully connected layer 4 'softmax' Softmax softmax 5 'classoutput' Classification Output crossentropyex with '1' and 8 other classes
테스트 데이터를 불러옵니다.
[XTest,YTest] = japaneseVowelsTestData;
테스트 데이터를 분류합니다.
YPred = classify(net,XTest);
처음 10개 시퀀스의 레이블을 예측된 레이블과 함께 표시합니다.
[YTest(1:10) YPred(1:10)]
ans = 10x2 categorical
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
예측의 분류 정확도를 계산합니다.
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.8595
훈련된 신경망을 사용하여 특징 데이터 분류하기
사전 훈련된 신경망 TransmissionCasingNet
을 불러옵니다. 이 신경망은 숫자형 센서 측정값, 통계 및 categorical형 입력값의 혼합 데이터가 주어지면 변속기 시스템의 기어 톱니 상태를 분류합니다.
load TransmissionCasingNet.mat
신경망 아키텍처를 표시합니다.
net.Layers
ans = 7x1 Layer array with layers: 1 'input' Feature Input 22 features with 'zscore' normalization 2 'fc_1' Fully Connected 50 fully connected layer 3 'batchnorm' Batch Normalization Batch normalization with 50 channels 4 'relu' ReLU ReLU 5 'fc_2' Fully Connected 2 fully connected layer 6 'softmax' Softmax softmax 7 'classoutput' Classification Output crossentropyex with classes 'No Tooth Fault' and 'Tooth Fault'
CSV 파일 "transmissionCasingData.csv"
에서 변속기 케이싱 데이터를 읽어 들입니다.
filename = "transmissionCasingData.csv"; tbl = readtable(filename,'TextType','String');
convertvars
함수를 사용하여 예측을 위한 레이블을 categorical형으로 변환합니다.
labelName = "GearToothCondition"; tbl = convertvars(tbl,labelName,'categorical');
categorical형 특징을 사용하여 예측을 수행하려면 먼저 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)
ans=8×23 table
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
훈련된 신경망을 사용하여 테스트 데이터의 레이블을 예측하고 정확도를 계산합니다. 훈련에 사용된 것과 동일하게 미니 배치 크기를 지정합니다.
YPred = classify(net,tbl(:,1:end-1));
분류 정확도를 계산합니다. 정확도는 신경망이 올바르게 예측하는 레이블의 비율입니다.
YTest = tbl{:,labelName}; accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9952
입력 인수
net
— 훈련된 신경망
SeriesNetwork
객체 | DAGNetwork
객체
훈련된 신경망으로, SeriesNetwork
또는 DAGNetwork
객체로 지정됩니다. 사전 훈련된 신경망을 가져오거나(예: googlenet
함수 사용) trainNetwork
를 사용하여 자신만의 고유한 신경망을 훈련시켜 훈련된 신경망을 얻을 수 있습니다.
imds
— 영상 데이터저장소
ImageDatastore
객체
영상 데이터저장소로, ImageDatastore
객체로 지정됩니다.
ImageDatastore
는 프리페치 작업을 사용한 JPG 또는 PNG 영상 파일의 배치 읽기를 허용합니다. 영상 읽기를 위해 사용자 지정 함수를 사용하는 경우, ImageDatastore
는 프리페치를 수행하지 않습니다.
팁
딥러닝을 위해 영상을 효율적으로 전처리하려면(영상 크기 조정 포함) augmentedImageDatastore
를 사용하십시오.
imageDatastore
의 readFcn
옵션은 일반적으로 상당히 느리므로 전처리나 크기 조정을 위해 사용하지 마십시오.
ds
— 데이터저장소
데이터저장소
메모리에 담을 수 없는 큰 데이터 및 전처리를 위한 데이터저장소. 데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 데이터저장소 출력값의 형식은 신경망 아키텍처에 따라 달라집니다.
신경망 아키텍처 | 데이터저장소 출력값 | 출력값의 예 |
---|---|---|
단일 입력값 | 테이블 또는 셀형 배열로, 여기서 첫 번째 열은 예측 변수를 지정합니다. 테이블 요소는 스칼라 또는 행 벡터이거나 숫자형 배열을 포함하는 1×1 셀형 배열이어야 합니다. 사용자 지정 데이터저장소는 테이블을 출력해야 합니다. | data = read(ds) data = 4×1 table Predictors __________________ {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} |
data = read(ds) data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} | ||
다중 입력값 | 열 개수가 처음 입력값의 순서는 신경망의 | data = read(ds) data = 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} |
예측 변수의 형식은 데이터의 유형에 따라 달라집니다.
데이터 | 예측 변수의 형식 |
---|---|
2차원 영상 | h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다. |
3차원 영상 | h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다. |
벡터 시퀀스 | 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는 시퀀스 길이입니다. 미니 배치의 각 시퀀스는 시퀀스 길이가 같아야 합니다. |
특징 | c×1 열 벡터로, 여기서 c는 특징의 개수입니다. |
자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.
X
— 영상 데이터 또는 특징 데이터
숫자형 배열
영상 데이터 또는 특징 데이터로, 숫자형 배열로 지정됩니다. 배열의 크기는 입력값의 유형에 따라 달라집니다.
입력 | 설명 |
---|---|
2차원 영상 | h×w×c×N 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수이고 N은 영상 개수입니다. |
3차원 영상 | h×w×d×c×N 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수이고 N은 영상 개수입니다. |
특징 | N×numFeatures 숫자형 배열로, 여기서 N은 관측값의 개수이고, numFeatures 는 입력 데이터의 특징의 개수입니다. |
배열에 NaN
이 포함되어 있는 경우, 이 값이 신경망 끝까지 전파됩니다.
여러 개의 입력값을 갖는 신경망의 경우, 여러 개의 배열 X1
, …, XN
을 지정할 수 있습니다. 여기서 N
은 신경망 입력값의 개수이고, 입력값 Xi
는 신경망 입력값 net.InputNames(i)
에 대응됩니다.
sequences
— 시퀀스 또는 시계열 데이터
숫자형 시퀀스로 구성된 셀형 배열 | 숫자형 배열 | 데이터저장소
시퀀스 또는 시계열 데이터로, 숫자형 배열로 구성된 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는 시퀀스 길이입니다. |
데이터저장소 입력값의 경우, 데이터저장소는 데이터를 시퀀스로 구성된 셀형 배열 또는 첫 번째 열이 시퀀스를 포함하는 테이블로 반환해야 합니다. 시퀀스 데이터의 차원은 위 표와 같아야 합니다.
tbl
— 영상 데이터 또는 특징 데이터로 구성된 테이블
table
영상 데이터 또는 특징 데이터로 구성된 테이블. 테이블의 각 행은 관측값 하나에 대응됩니다.
테이블 열에서 예측 변수의 배치되는 방식은 입력 데이터의 유형에 따라 달라집니다.
입력 | 예측 변수 |
---|---|
영상 데이터 |
예측 변수는 단일 열에 지정하십시오. |
특징 데이터 | 숫자형 스칼라. 예측 변수를 테이블의 처음 |
이 인수는 입력값이 하나만 있는 신경망을 지원합니다.
데이터형: table
이름-값 인수
예: 'MiniBatchSize','256'
은 미니 배치 크기를 256으로 지정합니다.
선택적으로 Name,Value
인수가 쉼표로 구분되어 지정됩니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. Name
은 작은따옴표(' '
) 안에 표시해야 합니다.
MiniBatchSize
— 미니 배치의 크기
128 (디폴트 값) | 양의 정수
예측에 사용할 미니 배치의 크기로, 양의 정수로 지정됩니다. 미니 배치가 클수록 메모리가 더 많이 필요하지만 예측 속도는 빨라질 수 있습니다.
서로 다른 길이를 갖는 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오. 미니 배치 크기와 채우기 옵션을 지정하려면 각각 'MiniBatchSize'
옵션과 'SequenceLength'
옵션을 사용하십시오.
예: 'MiniBatchSize',256
Acceleration
— 성능 최적화
'auto'
(디폴트 값) | 'mex'
| 'none'
성능 최적화로, 'Acceleration'
과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
'auto'
— 입력 신경망 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다.'mex'
— MEX 함수를 컴파일하고 실행합니다. 이 옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.'none'
— 모든 가속을 비활성화합니다.
디폴트 옵션은 'auto'
입니다. 'auto'
가 지정된 경우 MATLAB®은 호환되는 여러 최적화를 적용합니다. 'auto'
옵션을 사용할 경우 MATLAB은 절대로 MEX 함수를 생성하지 않습니다.
'Acceleration'
옵션 'auto'
와 'mex'
를 사용하면 성능이 향상될 수 있는 대신 초기 실행 시간이 늘어납니다. 호환되는 파라미터를 사용한 후속 호출은 더 빨리 실행됩니다. 성능 최적화는 새 입력 데이터를 사용하여 함수를 여러 번 호출해야 하는 경우에 사용하십시오.
'mex'
옵션은 신경망과 함수 호출에서 사용된 파라미터에 따라 MEX 함수를 생성하고 실행합니다. 단일 신경망에 한 번에 여러 개의 MEX 함수가 연결되어 있을 수 있습니다. 신경망 변수를 지우면 해당 신경망에 연결된 모든 MEX 함수도 지워집니다.
'mex'
옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. MEX 가속은 이름-값 옵션 'ExecutionEvironment','gpu'
만 사용하여 단일 GPU 실행을 지원합니다.
'mex'
옵션을 사용하려면 C/C++ 컴파일러가 설치되어 있어야 하며 GPU Coder™ Interface for Deep Learning Libraries 지원 패키지가 필요합니다. MATLAB의 애드온 탐색기를 사용하여 지원 패키지를 설치하십시오. 설정 지침은 MEX Setup (GPU Coder) 항목을 참조하십시오. GPU Coder는 필요하지 않습니다.
'mex'
옵션은 모든 계층을 지원하지는 않습니다. 지원되는 계층 목록은 Supported Layers (GPU Coder) 항목을 참조하십시오. imageInputLayer
를 갖는 신경망만 지원됩니다.
'mex'
옵션을 사용할 때는 MATLAB Compiler™를 사용하여 신경망을 배포할 수 없습니다.
예: 'Acceleration','mex'
ExecutionEnvironment
— 하드웨어 리소스
'auto'
(디폴트 값) | 'gpu'
| 'cpu'
| 'multi-gpu'
| 'parallel'
하드웨어 리소스로, 'ExecutionEnvironment'
와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
'auto'
— GPU를 사용할 수 있으면 GPU를 사용하고 그렇지 않으면 CPU를 사용합니다.'gpu'
— GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.'cpu'
— CPU를 사용합니다.'multi-gpu'
— 디폴트 클러스터 프로파일에 따라 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용합니다. 기존 병렬 풀이 없는 경우 소프트웨어는 사용 가능한 GPU의 개수와 동일한 풀 크기로 병렬 풀을 시작합니다.'parallel'
— 디폴트 클러스터 프로파일에 따라 로컬 또는 원격 병렬 풀을 사용합니다. 기존 병렬 풀이 없는 경우 소프트웨어는 디폴트 클러스터 프로파일을 사용하여 병렬 풀을 시작합니다. 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU를 갖는 워커만 계산을 수행합니다. 풀에 GPU가 없는 경우, 대신 사용 가능한 모든 CPU 워커에서 계산이 이루어집니다.
서로 다른 실행 환경을 사용해야 하는 경우에 대한 자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.
'gpu'
옵션, 'multi-gpu'
옵션, 'parallel'
옵션을 사용하려면 Parallel Computing Toolbox가 필요합니다. 딥러닝을 위해 GPU를 사용하려면 지원되는 GPU 장치도 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. 이러한 옵션 중 하나를 선택했는데 Parallel Computing Toolbox 또는 적당한 GPU가 없는 경우, 오류가 반환됩니다.
'multi-gpu'
및 'parallel'
옵션은 lstmLayer
객체, bilstmLayer
객체 또는 gruLayer
객체를 포함하는 순환 신경망(RNN)을 지원하지 않습니다.
예: 'ExecutionEnvironment','cpu'
SequenceLength
— 입력 시퀀스를 채우거나 자르거나 분할하는 옵션
'longest'
(디폴트 값) | 'shortest'
| 양의 정수
입력 시퀀스를 채우거나 자르거나 분할하는 옵션으로, 다음 중 하나로 지정됩니다.
'longest'
— 각 미니 배치의 시퀀스가 가장 긴 시퀀스와 길이가 같아지도록 채웁니다. 이 옵션은 채우기로 인해 신경망에 잡음이 포함되더라도 데이터를 버리지 않습니다.'shortest'
— 각 미니 배치의 시퀀스가 가장 짧은 시퀀스와 길이가 같아지도록 자릅니다. 이 옵션은 데이터를 버리게 되더라도 채우기를 추가하지 않습니다.양의 정수 — 각 미니 배치에 대해, 미니 배치의 가장 긴 시퀀스 길이보다 큰 지정된 길이의 가장 가까운 배수로 시퀀스를 채운 다음, 지정된 길이를 갖는 더 작은 크기의 시퀀스로 분할합니다. 분할이 이루어지면 소프트웨어가 미니 배치를 추가로 만듭니다. 전체 시퀀스가 메모리에 맞지 않으면 이 옵션을 사용하십시오. 또는
'MiniBatchSize'
옵션을 더 낮은 값으로 설정하여 미니 배치당 시퀀스 개수를 줄여 보십시오.
입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.
예: 'SequenceLength','shortest'
SequencePaddingDirection
— 채우기 또는 자르기 방향
'right'
(디폴트 값) | 'left'
채우기 또는 자르기 방향으로, 다음 중 하나로 지정됩니다.
'right'
— 시퀀스들을 오른쪽에서 채우거나 자릅니다. 시퀀스들은 동일한 시간 스텝에서 시작하며 소프트웨어가 시퀀스들의 끝 부분에서 자르기나 채우기를 수행합니다.'left'
— 시퀀스들을 왼쪽에서 채우거나 자릅니다. 시퀀스들이 동일한 시간 스텝에서 끝나도록 소프트웨어가 시퀀스들의 시작 부분에서 자르기나 채우기를 수행합니다.
LSTM 계층은 시퀀스 데이터를 한 번에 하나의 시간 스텝씩 처리하기 때문에 계층의 OutputMode
속성이 'last'
인 경우 마지막 시간 스텝에서의 채우기가 계층 출력에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 왼쪽에서 채우거나 자르려면 'SequencePaddingDirection'
옵션을 'left'
로 설정하십시오.
sequence-to-sequence 신경망의 경우(각 LSTM 계층의 OutputMode
속성이 'sequence'
인 경우), 첫 시간 스텝들에서의 채우기가 앞쪽에 있는 시간 스텝들의 예측에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 오른쪽에서 채우거나 자르려면 'SequencePaddingDirection'
옵션을 'right'
로 설정하십시오.
입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.
SequencePaddingValue
— 입력 시퀀스에 채울 값
0 (디폴트 값) | 스칼라
입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다. 이 옵션은 SequenceLength
가 'longest'
또는 양의 정수인 경우에만 유효합니다. 시퀀스를 NaN
으로 채우면 신경망 전체로 오류가 전파될 수 있으므로 유의하십시오.
예: 'SequencePaddingValue',-1
출력 인수
YPred
— 예측 클레스 레이블
categorical형 벡터 | categorical형 벡터로 구성된 셀형 배열
예측 클래스 레이블로, categorical형 벡터 또는 categorical형 벡터로 구성된 셀형 배열로 반환됩니다. YPred
의 형식은 작업의 유형에 따라 달라집니다.
다음 표에서는 분류 작업의 형식을 설명합니다.
작업 | 형식 |
---|---|
영상 또는 특징 분류 | 레이블로 구성된 N×1 categorical형 벡터로, 여기서 N은 관측값의 개수입니다. |
sequence-to-label 분류 | |
sequence-to-sequence 분류 | 레이블로 구성된 categorical형 시퀀스의 N×1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 각 시퀀스는 각 미니 배치에 독립적으로 관측값이 1개인 sequence-to-sequence 분류 작업의 경우, |
scores
— 예측 클래스 점수
행렬 | 행렬로 구성된 셀형 배열
예측 점수 또는 응답 변수로, 행렬 또는 행렬로 구성된 셀형 배열로 반환됩니다. scores
의 형식은 작업의 유형에 따라 달라집니다.
다음 표에서는 scores
의 형식을 설명합니다.
작업 | 형식 |
---|---|
영상 분류 | N×K 행렬로, 여기서 N은 관측값의 개수이고 K는 클래스의 개수입니다. |
sequence-to-label 분류 | |
특징 분류 | |
sequence-to-sequence 분류 | 행렬로 구성된 N×1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 시퀀스는 K개의 행을 가진 행렬로, 여기서 K는 클래스의 개수입니다. 각 시퀀스는 각 미니 배치에 독립적으로 |
관측값이 1개인 sequence-to-sequence 분류 작업의 경우, sequences
는 행렬이 될 수 있습니다. 이 경우 scores
는 예측 클래스 점수로 구성된 행렬입니다.
분류 점수를 살펴보는 예제는 딥러닝을 사용하여 웹캠 영상 분류하기 항목을 참조하십시오.
알고리즘
trainNetwork
함수를 사용하여 신경망을 훈련시키거나 DAGNetwork
객체 및 SeriesNetwork
객체와 함께 예측 함수 또는 검증 함수를 사용할 때 소프트웨어는 단정밀도 부동소수점 연산방식을 사용하여 이러한 계산을 수행합니다. 훈련, 예측 및 검증을 위한 함수는 trainNetwork
, predict
, classify
, activations
등이 있습니다. CPU와 GPU를 모두 사용하여 신경망을 훈련시키는 경우, 단정밀도 연산방식이 사용됩니다.
대안
출력값이 여러 개인 신경망의 경우, predict
함수를 사용하고 'ReturnCategorical'
옵션을 true
로 설정하십시오.
predict
를 사용하여, 훈련된 신경망에서 예측 점수를 계산할 수 있습니다.
activations
를 사용하여 신경망 계층에서의 활성화 결과를 구할 수 있습니다.
sequence-to-label 및 sequence-to-sequence 분류 신경망의 경우, classifyAndUpdateState
와 predictAndUpdateState
를 사용하여 신경망 상태를 예측하고 업데이트할 수 있습니다.
참고 문헌
[1] M. Kudo, J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pages 1103–1111.
[2] UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
C++ 코드 생성 시에 다음과 같은 구문이 지원됩니다.
[YPred,scores] = classify(net,X)
[YPred,scores] = classify(net,sequences)
[YPred,scores] = classify(__,Name,Value)
회귀 신경망과 출력값이 여러 개인 신경망에서는
classify
함수에 대한 C++ 코드 생성이 지원되지 않습니다.벡터 시퀀스 입력값의 경우, 코드 생성 시에 특징의 개수가 상수여야 합니다. 시퀀스 길이는 가변 크기일 수 있습니다.
영상 시퀀스 입력값의 경우, 코드 생성 시에 높이, 너비, 채널 개수가 상수여야 합니다.
코드 생성 시에는
'MiniBatchSize'
,'SequenceLength'
,'SequencePaddingDirection'
및'SequencePaddingValue'
이름-값 쌍 인수만 지원됩니다. 모든 이름-값 쌍은 컴파일타임 상수여야 합니다.코드 생성 시에는
'SequenceLength'
이름-값 쌍의'longest'
및'shortest'
옵션만 지원됩니다.GCC C/C++ 컴파일러 버전 8.2 이상을 사용하면
-Wstringop-overflow
경고가 표시될 수 있습니다.Intel® MKL-DNN 대상에 대한 코드 생성 시
'SequenceLength','longest'
,'SequencePaddingDirection','left'
및'SequencePaddingValue',0
이름-값 인수의 조합은 지원되지 않습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
GPU 코드 생성 시에 다음과 같은 구문이 지원됩니다.
[YPred,scores] = classify(net,X)
[YPred,scores] = classify(net,sequences)
[YPred,scores] = classify(__,Name,Value)
회귀 신경망과 출력값이 여러 개인 신경망에서는
classify
함수에 대한 GPU 코드 생성이 지원되지 않습니다.GPU 코드 생성 시
gpuArray
입력값은classify
함수에서 지원되지 않습니다.cuDNN 라이브러리는 벡터와 2차원 영상 시퀀스를 지원합니다. TensorRT 라이브러리는 벡터 입력 시퀀스만 지원합니다. GPU용 ARM®
Compute Library
는 순환 신경망을 지원하지 않습니다.벡터 시퀀스 입력값의 경우, 코드 생성 시에 특징의 개수가 상수여야 합니다. 시퀀스 길이는 가변 크기일 수 있습니다.
영상 시퀀스 입력값의 경우, 코드 생성 시에 높이, 너비, 채널 개수가 상수여야 합니다.
코드 생성 시에는
'MiniBatchSize'
,'SequenceLength'
,'SequencePaddingDirection'
및'SequencePaddingValue'
이름-값 쌍 인수만 지원됩니다. 모든 이름-값 쌍은 컴파일타임 상수여야 합니다.코드 생성 시에는
'SequenceLength'
이름-값 쌍의'longest'
및'shortest'
옵션만 지원됩니다.classify
함수에 대한 GPU 코드 생성에서는 반정밀도 부동소수점 데이터형으로 정의된 입력값이 지원됩니다. 자세한 내용은half
(GPU Coder)를 참조하십시오.GCC C/C++ 컴파일러 버전 8.2 이상을 사용하면
-Wstringop-overflow
경고가 표시될 수 있습니다.
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
계산을 병렬로 실행하려면 'ExecutionEnvironment'
옵션을 'multi-gpu'
또는 'parallel'
로 설정하십시오.
자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
입력 데이터가
gpuArray
,gpuArray
데이터를 포함하는 셀형 배열 또는 테이블, 또는gpuArray
데이터를 반환하는 데이터저장소인 경우"ExecutionEnvironment"
옵션은"auto"
또는"gpu"
여야 합니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
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)