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

predictAndUpdateState

훈련된 순환 신경망을 사용하여 응답 변수 예측 및 신경망 상태 업데이트

설명

CPU 또는 GPU에서 훈련된 심층 학습 네트워크를 사용하여 예측을 수행할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox™와 CUDA® 지원 NVIDIA® GPU(Compute Capability 3.0 이상)가 필요합니다. 하드웨어 요구 사항은 'ExecutionEnvironment' 이름-값 쌍 인수를 사용하여 지정하십시오.

예제

[updatedNet,YPred] = predictAndUpdateState(recNet,sequences)는 훈련된 순환 신경망 recNet을 사용하여 sequences의 데이터에 대한 응답 변수를 예측하고 신경망 상태를 업데이트합니다.

이 함수는 순환 신경망만 지원합니다. 입력값 recNet은 적어도 하나의 순환 계층을 가져야 합니다.

[updatedNet,YPred] = predictAndUpdateState(___,Name,Value)는 위에 열거된 구문에 나와 있는 인수와 함께 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용합니다. 예를 들어, 'MiniBatchSize',27은 크기가 27인 미니 배치를 사용하여 예측을 수행합니다.

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

예제

모두 축소

훈련된 순환 신경망을 사용하여 응답 변수를 예측하고 신경망 상태를 업데이트합니다.

이 예제의 결과를 재현할 수 있도록 rng'default'로 설정합니다.

rng('default')

사전 훈련된 장단기 기억(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

테스트 데이터를 불러옵니다.

load JapaneseVowelsTest

시퀀스의 시간 스텝을 루프를 사용해 순회합니다. 각 시간 스텝에 대한 점수를 예측하고 네트워크 상태를 업데이트합니다.

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

예측 점수를 플로팅합니다. 이 플롯은 시간 스텝 간에 예측 점수가 변화하는 것을 보여줍니다.

classNames = string(net.Layers(end).Classes);
figure
lines = plot(scores');
xlim([1 numTimeSteps])
legend("Class " + classNames,'Location','northwest')
xlabel("Time Step")
ylabel("Score")
title("Prediction Scores Over Time Steps")

시간 스텝에 대한 예측 점수에서 정답 클래스를 강조 표시합니다.

trueLabel = YTest(94)
trueLabel = categorical
     3 

lines(trueLabel).LineWidth = 3;

최종 시간 스텝 예측을 막대 차트로 표시합니다.

figure
bar(score)
title("Final Prediction Scores")
xlabel("Class")
ylabel("Score")

입력 인수

모두 축소

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

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

시퀀스 또는 시계열 데이터로, 숫자형 배열로 구성된 Nx1 셀형 배열, 단일 시퀀스를 나타내는 숫자형 배열 또는 데이터저장소로 지정됩니다. 여기서 N은 관측값 개수입니다.

셀형 배열 또는 숫자형 배열 입력값에 대해, 시퀀스를 포함하는 숫자형 배열의 차원은 데이터 유형에 따라 달라집니다.

입력설명
벡터 시퀀스cxs 행렬. 여기서 c는 시퀀스의 특징 개수이고 s는 시퀀스 길이입니다.
2차원 이미지 시퀀스hxwxcxs 배열. 여기서 h, w, c는 이미지의 높이, 너비, 채널 개수이고 s는 시퀀스 길이입니다.
3차원 이미지 시퀀스hxwxdxcxs 배열. 여기서 h, w, d, c는 3차원 이미지의 높이, 너비, 깊이, 채널 개수이고 s는 시퀀스 길이입니다.

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

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: [updatedNet, YPred] = predictAndUpdateState(recNet,C,'MiniBatchSize',27)은 크기가 27인 미니 배치를 사용하여 예측을 수행합니다.

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

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

예: 'MiniBatchSize',256

성능 최적화로, 'Acceleration'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'auto' — 입력 네트워크 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다.

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

디폴트 옵션은 'auto'입니다.

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

예: 'Acceleration','auto'

하드웨어 리소스로, 'ExecutionEnvironment'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

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

  • 'gpu' — GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox와 CUDA 지원 NVIDIA GPU(Compute Capability 3.0 이상)가 필요합니다. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

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

예: 'ExecutionEnvironment','cpu'

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

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

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

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

시퀀스 길이를 양의 정수로 지정하면 소프트웨어가 이 작은 크기의 시퀀스를 연속적인 반복을 통해 처리합니다. 네트워크는 분할된 시퀀스 사이에서 네트워크 상태를 업데이트합니다.

소프트웨어는 오른쪽에 있는 시퀀스를 채우고 자릅니다. 입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.

예: 'SequenceLength','shortest'

입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다. 이 옵션은 SequenceLength'longest' 또는 양의 정수인 경우에만 유효합니다. 시퀀스를 NaN으로 채우면 네트워크 전체로 오류가 전파될 수 있으므로 유의하십시오.

예: 'SequencePaddingValue',-1

출력 인수

모두 축소

업데이트된 네트워크로, SeriesNetwork 객체로 반환됩니다.

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

다음 표에서는 분류 문제의 형식을 설명합니다.

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

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

관측값이 1개인 sequence-to-sequence 분류 문제의 경우, sequences는 행렬이 될 수 있습니다. 이 경우 YPred는 점수로 구성된 KxS 행렬로, 여기서 K는 클래스의 개수이고, S는 대응되는 입력 시퀀스의 시간 스텝의 총 개수입니다.

다음 표에서는 회귀 문제의 형식을 설명합니다.

작업형식
sequence-to-one 회귀Nxr 행렬로, 여기서 N은 관측값의 개수이고 r은 응답 변수의 개수입니다.
sequence-to-sequence 회귀

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

관측값이 1개인 sequence-to-sequence 문제의 경우, sequences는 행렬일 수 있습니다. 이 경우 YPred는 응답 변수로 구성된 행렬입니다.

알고리즘

Deep Learning Toolbox™에 포함된 심층 학습 훈련, 예측 및 검증을 위한 모든 함수는 단정밀도 부동소수점 산술을 사용하여 계산을 수행합니다. 심층 학습을 위한 함수에는 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에 개발됨