Main Content

classifyAndUpdateState

훈련된 순환 신경망을 사용하여 데이터 분류 및 신경망 상태 업데이트

설명

CPU 또는 GPU에서 훈련된 딥러닝 신경망을 사용하여 예측을 수행할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. 하드웨어 요구 사항은 이름-값 인수 ExecutionEnvironment를 사용하여 지정하십시오.

출력값이 여러 개인 신경망의 경우, predictAndUpdateState 함수를 대신 사용하고 ReturnCategorical 옵션을 true로 설정하십시오.

예제

[updatedNet,Y] = classifyAndUpdateState(recNet,sequences)는 훈련된 순환 신경망 recNet을 사용하여 sequences의 데이터를 분류하고 신경망 상태를 업데이트합니다.

이 함수는 순환 신경망만 지원합니다. 입력값 recNet은 LSTM 계층 같은 순환 계층을 적어도 하나 가지거나 상태 파라미터를 사용하는 사용자 지정 계층을 가져야 합니다.

[updatedNet,Y] = classifyAndUpdateState(recNet,X1,...,XN)은 다중 입력 신경망 recNet에 대해 숫자형 배열 또는 셀형 배열 X1, …, XN의 데이터의 클래스 레이블을 예측합니다. 입력값 Xi는 신경망 입력값 recNet.InputNames(i)에 대응됩니다.

[updatedNet,Y] = classifyAndUpdateState(recNet,mixed)는 혼합된 데이터형의 데이터를 갖는 다중 입력 신경망 recNet에 대해 클래스 레이블을 예측합니다.

예제

[updatedNet,Y,scores] = classifyAndUpdateState(___)는 위에 열거된 구문 중 하나를 사용하여 클래스 레이블에 대응되는 분류 점수도 반환합니다.

___ = classifyAndUpdateState(___,Name=Value)는 위에 열거된 구문 중 하나를 사용하여 하나 이상의 이름-값 인수로 지정된 추가 옵션으로 클래스 레이블을 예측합니다. 예를 들어, MiniBatchSize=27은 크기가 27인 미니 배치를 사용하여 데이터를 분류합니다.

서로 길이가 다른 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오. 미니 배치 크기와 채우기 옵션을 지정하려면 각각 MiniBatchSize 옵션과 SequenceLength 옵션을 사용하십시오.

분류하고 신경망 상태 업데이트하기

예제

모두 축소

순환 신경망을 사용하여 데이터를 분류하고 신경망 상태를 업데이트합니다.

사전 훈련된 장단기 기억(LSTM) 신경망 JapaneseVowelsNet을 불러옵니다. 이것은 [1]과 [2]에서 설명한 Japanese Vowels 데이터 세트에서 훈련된 신경망입니다. 이 신경망은 미니 배치 크기 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,TTest] = japaneseVowelsTestData;

시퀀스의 시간 스텝을 루프를 사용해 순회합니다. 각 시간 스텝을 분류하고 신경망 상태를 업데이트합니다.

X = XTest{94};
numTimeSteps = size(X,2);
for i = 1:numTimeSteps
    v = X(:,i);
    [net,label,score] = classifyAndUpdateState(net,v);
    labels(i) = label;
end

예측 레이블을 계단 플롯으로 플로팅합니다. 이 플롯은 시간 스텝 간의 예측 변화를 보여줍니다.

figure
stairs(labels,"-o")
xlim([1 numTimeSteps])
xlabel("Time Step")
ylabel("Predicted Class")
title("Classification Over Time Steps")

예측 레이블과 참 레이블을 비교합니다. 관측값의 참 레이블을 보여주는 가로선을 플로팅합니다.

trueLabel = TTest(94)
trueLabel = categorical
     3 

hold on
line([1 numTimeSteps],[trueLabel trueLabel], ...
    Color="red", ...
    LineStyle="--")
legend(["Prediction" "True Label"])

Figure contains an axes object. The axes object with title Classification Over Time Steps contains 2 objects of type stair, line. These objects represent Prediction, True Label.

입력 인수

모두 축소

훈련된 순환 신경망으로, SeriesNetwork 또는 DAGNetwork 객체로 지정됩니다. 사전 훈련된 신경망을 가져오거나 trainNetwork 함수를 사용하여 자신만의 고유한 신경망을 훈련시켜 훈련된 신경망을 얻을 수 있습니다.

recNet은 순환 신경망입니다. 이 인수는 적어도 하나의 순환 계층을 가져야 합니다(예: LSTM 신경망).

시퀀스 또는 시계열 데이터로, 숫자형 배열로 구성된 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는 시퀀스 길이입니다.

데이터저장소 입력값의 경우, 데이터저장소는 데이터를 시퀀스로 구성된 셀형 배열 또는 첫 번째 열이 시퀀스를 포함하는 테이블로 반환해야 합니다. 시퀀스 데이터의 차원은 위 표와 같아야 합니다.

복소수 값 데이터를 신경망에 입력하려면 입력 계층의 SplitComplexInputs 옵션이 1이어야 합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
복소수 지원 여부:

여러 개의 입력값을 갖는 신경망에 대한 숫자형 배열 또는 셀형 배열입니다.

시퀀스 예측 변수 입력값의 경우 입력값은 단일 시퀀스를 나타내는 숫자형 배열 또는 시퀀스로 구성된 셀형 배열이어야 하며, 이때 예측 변수의 형식은 sequences 인수 설명에 기술된 형식과 일치해야 합니다. 영상 및 특징 예측 변수 입력값의 경우 입력값은 숫자형 배열이어야 하고 예측 변수의 형식은 다음 중 하나와 일치해야 합니다.

데이터형식
2차원 영상

h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다.

3차원 영상h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다.
특징 데이터

c×1 열 벡터로, 여기서 c는 특징의 개수입니다.

여러 개의 입력값을 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network on Image and Feature Data 항목을 참조하십시오.

복소수 값 데이터를 신경망에 입력하려면 입력 계층의 SplitComplexInputs 옵션이 1이어야 합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
복소수 지원 여부:

혼합된 데이터로, 다음 중 하나로 지정됩니다.

데이터 유형설명대표적인 사용법
TransformedDatastore사용자 지정 변환 함수를 사용하여 기본 데이터저장소에서 읽어 들인 데이터 배치를 변환하는 데이터저장소

  • 여러 개의 입력값을 갖는 신경망을 사용하여 예측을 수행합니다.

  • classifyAndUpdateState에서 지원하지 않는 데이터저장소의 출력값이 필요한 형식을 갖도록 변환합니다.

  • 데이터저장소 출력값에 사용자 지정 변환을 적용합니다.

CombinedDatastore둘 이상의 기본 데이터저장소에서 읽어 들인 데이터저장소

  • 여러 개의 입력값을 갖는 신경망을 사용하여 예측을 수행합니다.

  • 서로 다른 데이터 소스의 예측 변수를 결합합니다.

사용자 지정 미니 배치 데이터저장소데이터의 미니 배치를 반환하는 사용자 지정 데이터저장소

다른 데이터저장소에서 지원하지 않는 형식의 데이터를 사용하여 예측을 수행합니다.

자세한 내용은 Develop Custom Mini-Batch Datastore 항목을 참조하십시오.

transform 함수와 combine 함수를 사용하여 예측을 수행하기 위해 다른 내장 데이터저장소를 사용할 수 있습니다. 이러한 함수는 데이터저장소에서 읽어 들인 데이터를 classifyAndUpdateState 함수에 필요한 테이블 또는 셀형 배열 형식으로 변환할 수 있습니다. 자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.

데이터저장소는 데이터를 테이블 또는 셀형 배열로 반환해야 합니다. 사용자 지정 미니 배치 데이터저장소는 테이블을 출력해야 합니다. 데이터저장소 출력값의 형식은 신경망 아키텍처에 따라 달라집니다.

데이터저장소 출력값출력값의 예

열의 개수가 numInputs인 셀형 배열로, 여기서 numInputs는 신경망 입력값의 개수입니다.

입력값의 순서는 신경망의 InputNames 속성으로 지정됩니다.

data = read(ds)
data =

  4×3 cell array

    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}
    {12×50 double}    {28×1 double}

시퀀스 예측 변수 입력값의 경우 입력값은 단일 시퀀스를 나타내는 숫자형 배열 또는 시퀀스로 구성된 셀형 배열이어야 하며, 이때 예측 변수의 형식은 sequences 인수 설명에 기술된 형식과 일치해야 합니다. 영상 및 특징 예측 변수 입력값의 경우 입력값은 숫자형 배열이어야 하고 예측 변수의 형식은 다음 중 하나와 일치해야 합니다.

데이터형식
2차원 영상

h×w×c 숫자형 배열로, 여기서 h, w, c는 각각 영상의 높이, 너비, 채널 개수입니다.

3차원 영상h×w×d×c 숫자형 배열로, 여기서 h, w, d, c는 각각 영상의 높이, 너비, 깊이, 채널 개수입니다.
특징 데이터

c×1 열 벡터로, 여기서 c는 특징의 개수입니다.

여러 개의 입력값을 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network on Image and Feature Data 항목을 참조하십시오.

숫자형 배열을 데이터저장소로 변환하려면, ArrayDatastore를 사용하십시오.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: [updatedNet,Y] = classifyAndUpdateState(recNet,C,MiniBatchSize=27)은 크기가 27인 미니 배치를 사용하여 데이터를 분류합니다.

예측에 사용할 미니 배치의 크기로, 양의 정수로 지정됩니다. 미니 배치가 클수록 메모리가 더 많이 필요하지만 예측 속도는 빨라질 수 있습니다.

서로 길이가 다른 시퀀스를 사용하여 예측을 수행할 때는 미니 배치 크기가 입력 데이터에 추가되는 채우기 양에 영향을 주어 서로 다른 예측값이 나올 수 있습니다. 이 경우 여러 값을 사용해 보며 어느 것이 신경망에 가장 적합한지 살펴보십시오. 미니 배치 크기와 채우기 옵션을 지정하려면 각각 MiniBatchSize 옵션과 SequenceLength 옵션을 사용하십시오.

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

성능 최적화로, 다음 중 하나로 지정됩니다.

  • "auto" — 입력 신경망 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다.

  • "none" — 모든 가속을 비활성화합니다.

Acceleration 옵션으로 "auto"를 사용하면 성능이 향상될 수 있는 대신 초기 실행 시간이 늘어납니다. 호환되는 파라미터를 사용한 후속 호출은 더 빨리 실행됩니다. 성능 최적화는 새 입력 데이터를 사용하여 함수를 여러 번 호출해야 하는 경우에 사용하십시오.

하드웨어 리소스로, 다음 중 하나로 지정됩니다.

  • "auto" — GPU를 사용할 수 있으면 GPU를 사용하고 그렇지 않으면 CPU를 사용합니다.

  • "gpu" — GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

  • "cpu" — CPU를 사용합니다.

입력 시퀀스를 채우거나 자르거나 분할하는 옵션으로, 다음 중 하나로 지정됩니다.

  • "longest" — 각 미니 배치의 시퀀스 길이가 가장 긴 시퀀스의 길이와 같아지도록 채웁니다. 이 옵션은 채우기로 인해 신경망에 잡음이 포함되더라도 데이터를 버리지 않습니다.

  • "shortest" — 각 미니 배치의 시퀀스가 가장 짧은 시퀀스와 길이가 같아지도록 자릅니다. 이 옵션은 데이터를 버리게 되더라도 채우기를 추가하지 않습니다.

  • 양의 정수 — 각 미니 배치에 대해, 미니 배치에서 가장 긴 시퀀스의 길이에 맞춰 시퀀스를 채운 다음, 지정된 길이를 갖는 더 작은 크기의 시퀀스로 분할합니다. 분할이 이루어지면 소프트웨어가 미니 배치를 추가로 만듭니다. 데이터의 시퀀스 길이가 지정된 시퀀스 길이로 균등하게 나뉘지 않는 경우, 해당 시퀀스의 끝을 포함하는 미니 배치의 길이는 지정된 시퀀스 길이보다 짧습니다. 전체 시퀀스가 메모리에 맞지 않으면 이 옵션을 사용하십시오. 또는 MiniBatchSize 옵션을 더 낮은 값으로 설정하여 미니 배치당 시퀀스 개수를 줄여 보십시오.

입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

채우기 또는 자르기 방향으로, 다음 중 하나로 지정됩니다.

  • "right" — 시퀀스들을 오른쪽에서 채우거나 자릅니다. 시퀀스들은 동일한 시간 스텝에서 시작하며 소프트웨어가 시퀀스들의 끝 부분에서 자르기나 채우기를 수행합니다.

  • "left" — 시퀀스들을 왼쪽에서 채우거나 자릅니다. 시퀀스들이 동일한 시간 스텝에서 끝나도록 소프트웨어가 시퀀스들의 시작 부분에서 자르기나 채우기를 수행합니다.

순환 계층은 시퀀스 데이터를 한 번에 하나의 시간 스텝씩 처리하기 때문에 순환 계층의 OutputMode 속성이 'last'인 경우 마지막 시간 스텝에서의 채우기가 계층 출력에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 왼쪽에서 채우거나 자르려면 SequencePaddingDirection 옵션을 "left"로 설정하십시오.

sequence-to-sequence 신경망의 경우(각 순환 계층의 OutputMode 속성이 'sequence'인 경우), 첫 시간 스텝들에서의 채우기가 앞쪽에 있는 시간 스텝들의 예측에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 오른쪽에서 채우거나 자르려면 SequencePaddingDirection 옵션을 "right"로 설정하십시오.

입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.

입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다.

이 옵션은 SequenceLength"longest" 또는 양의 정수인 경우에만 유효합니다. 시퀀스를 NaN으로 채우면 신경망 전체로 오류가 전파될 수 있으므로 유의하십시오.

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

출력 인수

모두 축소

업데이트된 신경망. updatedNet은 입력 신경망과 동일한 유형의 신경망입니다.

예측 클래스 레이블로, categorical형 벡터 또는 categorical형 벡터로 구성된 셀형 배열로 반환됩니다. Y의 형식은 문제의 유형에 따라 달라집니다.

다음 표에서는 Y의 형식을 설명합니다.

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

레이블로 구성된 categorical형 시퀀스의 N×1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 각 시퀀스는 각 미니 배치에 독립적으로 SequenceLength 옵션을 적용한 후의 대응하는 입력 시퀀스와 시간 스텝의 개수가 같습니다.

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

예측 클래스 점수로, 행렬 또는 행렬로 구성된 셀형 배열로 반환됩니다. scores의 형식은 문제의 유형에 따라 달라집니다.

다음 표에서는 scores의 형식을 설명합니다.

작업형식
sequence-to-label 분류N×K 행렬로, 여기서 N은 관측값의 개수이고 K는 클래스의 개수입니다.
sequence-to-sequence 분류

행렬로 구성된 N×1 셀형 배열로, 여기서 N은 관측값의 개수입니다. 시퀀스는 K개의 행을 가진 행렬로, 여기서 K는 클래스의 개수입니다. 각 시퀀스는 각 미니 배치에 독립적으로 SequenceLength 옵션을 적용한 후의 대응하는 입력 시퀀스와 시간 스텝의 개수가 같습니다.

관측값이 1개인 sequence-to-sequence 분류 문제의 경우, sequences는 행렬이 될 수 있습니다. 이 경우 scores는 예측 클래스 점수로 구성된 행렬입니다.

알고리즘

trainNetwork 함수를 사용하여 신경망을 훈련시키거나 DAGNetwork 객체 및 SeriesNetwork 객체와 함께 예측 함수 또는 검증 함수를 사용할 때 소프트웨어는 단정밀도 부동소수점 연산방식을 사용하여 이러한 계산을 수행합니다. 훈련, 예측 및 검증을 위한 함수는 trainNetwork, predict, classify, activations 등이 있습니다. CPU와 GPU를 모두 사용하여 신경망을 훈련시키는 경우, 단정밀도 연산방식이 사용됩니다.

참고 문헌

[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

확장 기능

버전 내역

R2017b에 개발됨

모두 확장