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

predict

훈련된 심층 학습(딥러닝) 신경망을 사용하여 응답 변수 예측

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

구문

YPred = predict(net,X)
YPred = predict(net,sequences)
YPred = predict(___,Name,Value)

설명

YPred = predict(net,X)는 훈련된 네트워크 net을 사용하여 X의 이미지 데이터에 대한 응답 변수를 예측합니다.

예제

YPred = predict(net,sequences)는 훈련된 LSTM 네트워크 net을 사용하여 sequences의 시퀀스 또는 시계열 데이터에 대한 응답 변수를 예측합니다.

예제

YPred = predict(___,Name,Value)는 하나 이상의 이름-값 쌍 인수로 지정된 추가 옵션을 사용하여 응답 변수를 예측합니다.

예제

모두 축소

샘플 데이터를 불러옵니다.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData는 숫자 훈련 세트를 4차원 배열 데이터로 불러옵니다. XTrain은 28x28x1x5,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 image normalization.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |   Accuracy   |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |        7.81% |       2.3026 |          0.0100 |
|       2 |          50 |       00:00:06 |       33.59% |       2.2735 |          0.0100 |
|       3 |         100 |       00:00:11 |       48.44% |       1.6613 |          0.0100 |
|       4 |         150 |       00:00:17 |       64.06% |       1.1803 |          0.0100 |
|       6 |         200 |       00:00:24 |       64.06% |       1.0499 |          0.0100 |
|       7 |         250 |       00:00:30 |       76.56% |       0.8392 |          0.0100 |
|       8 |         300 |       00:00:34 |       77.34% |       0.6981 |          0.0100 |
|       9 |         350 |       00:00:38 |       77.34% |       0.7084 |          0.0100 |
|      11 |         400 |       00:00:42 |       87.50% |       0.4902 |          0.0100 |
|      12 |         450 |       00:00:46 |       91.41% |       0.3839 |          0.0100 |
|      13 |         500 |       00:00:51 |       92.19% |       0.2986 |          0.0100 |
|      15 |         550 |       00:00:56 |       93.75% |       0.2583 |          0.0100 |
|      16 |         600 |       00:01:02 |       97.66% |       0.2009 |          0.0100 |
|      17 |         650 |       00:01:08 |       92.97% |       0.2642 |          0.0100 |
|      18 |         700 |       00:01:15 |       97.66% |       0.1448 |          0.0100 |
|      20 |         750 |       00:01:22 |       96.88% |       0.1314 |          0.0100 |
|      21 |         800 |       00:01:28 |       97.66% |       0.1233 |          0.0100 |
|      22 |         850 |       00:01:33 |       98.44% |       0.1009 |          0.0100 |
|      24 |         900 |       00:01:37 |      100.00% |       0.1051 |          0.0100 |
|      25 |         950 |       00:01:42 |       97.66% |       0.1483 |          0.0100 |
|      26 |        1000 |       00:01:48 |       99.22% |       0.0743 |          0.0100 |
|      27 |        1050 |       00:01:55 |      100.00% |       0.0603 |          0.0100 |
|      29 |        1100 |       00:02:04 |       99.22% |       0.0769 |          0.0100 |
|      30 |        1150 |       00:02:10 |      100.00% |       0.0524 |          0.0100 |
|      30 |        1170 |       00:02:12 |      100.00% |       0.0566 |          0.0100 |
|========================================================================================|

훈련된 네트워크를 테스트 세트에 대해 실행하고 점수를 예측합니다.

[XTest,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);

기본적으로 predict는 사용 가능한 경우 CUDA® 지원 GPU(Compute Capability 3.0)를 사용합니다. 'ExecutionEnvironment','cpu' 이름-값 쌍을 사용하여 predict를 CPU에서 실행하도록 할 수도 있습니다.

테스트 데이터에 들어 있는 처음 10개 이미지를 표시하고 predict로 예측한 결과와 비교합니다.

YTest(1:10,:)
ans = 10x1 categorical array
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 

YPred(1:10,:)
ans = 10x10 single matrix

    0.9989    0.0000    0.0004    0.0004    0.0000    0.0000    0.0001    0.0000    0.0000    0.0002
    0.8827    0.0000    0.0151    0.0001    0.0000    0.0002    0.0031    0.0001    0.0020    0.0966
    0.9999    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001
    0.9723    0.0000    0.0000    0.0000    0.0000    0.0000    0.0025    0.0000    0.0013    0.0240
    0.9434    0.0000    0.0091    0.0005    0.0000    0.0000    0.0001    0.0005    0.0462    0.0002
    0.9791    0.0000    0.0003    0.0000    0.0000    0.0000    0.0020    0.0000    0.0172    0.0013
    0.9938    0.0000    0.0001    0.0000    0.0000    0.0000    0.0039    0.0000    0.0020    0.0002
    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.9338    0.0000    0.0022    0.0004    0.0003    0.0024    0.0003    0.0000    0.0017    0.0590
    0.9090    0.0000    0.0054    0.0028    0.0001    0.0006    0.0392    0.0000    0.0387    0.0042

YTestXTest의 이미지에 대응되는 숫자를 포함합니다. YPred의 열은 이미지가 특정 숫자를 포함할 확률에 대한 predict의 추정값을 포함합니다. 즉, 첫 번째 열은 주어진 이미지가 숫자 0일 확률의 추정값을, 두 번째 열은 이미지가 숫자 1일 확률의 추정값을, 세 번째 열은 이미지가 숫자 2일 확률의 추정값을 포함하는 식입니다. 올바른 숫자일 확률에 대한 predict의 추정값은 1에 가깝고 다른 숫자일 확률에 대한 추정값은 0에 가까운 것을 확인할 수 있습니다. predict는 처음 10개의 관측값을 숫자 0으로 올바르게 추정합니다.

사전 훈련된 네트워크를 불러옵니다. 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

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

load JapaneseVowelsTest

테스트 데이터에 대해 예측을 수행합니다.

YPred = predict(net,XTest);

처음 10개 시퀀스에 대한 예측 점수를 표시합니다.

YPred(1:10,:)
ans = 10x9 single matrix

    0.9918    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0006    0.0059
    0.9868    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0010    0.0105
    0.9924    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0006    0.0054
    0.9896    0.0000    0.0000    0.0000    0.0006    0.0009    0.0001    0.0007    0.0080
    0.9965    0.0000    0.0000    0.0000    0.0007    0.0009    0.0000    0.0003    0.0016
    0.9888    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0087
    0.9886    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0089
    0.9982    0.0000    0.0000    0.0000    0.0006    0.0007    0.0000    0.0001    0.0004
    0.9883    0.0000    0.0000    0.0000    0.0006    0.0010    0.0001    0.0008    0.0093
    0.9959    0.0000    0.0000    0.0000    0.0007    0.0011    0.0000    0.0004    0.0019

예측 점수를 해당 시퀀스의 레이블과 비교합니다. 함수가 올바른 클래스에 높은 예측 점수를 할당한 것을 볼 수 있습니다.

YTest(1:10)
ans = 10x1 categorical array
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 
     1 

입력 인수

모두 축소

훈련된 네트워크로, SeriesNetwork 또는 DAGNetwork 객체로 지정됩니다. 사전 훈련된 네트워크를 가져오거나(예: alexnet 함수 사용) trainNetwork를 사용하여 자신만의 고유한 네트워크를 훈련시켜 훈련된 네트워크를 얻을 수 있습니다.

이미지 데이터로, 다음 중 하나로 지정됩니다.

  • 단일 이미지를 나타내는 3차원 배열. X는 크기가 hxwxc로, 여기서 h, w, c는 각각 이미지의 높이, 너비, 채널 개수입니다.

  • 이미지 스택을 나타내는 4차원 배열. X는 크기가 hxwxcxN으로, 여기서 N은 이미지의 개수입니다.

  • table. 첫 번째 열이 이미지에 대한 경로 또는 이미지를 나타내는 3차원 배열을 포함합니다.

  • ImageDatastore.

  • 미니 배치 데이터저장소. 내장 미니 배치 데이터저장소와 사용자 지정 미니 배치 데이터저장소에 대한 자세한 내용은 Preprocess Images for Deep Learning 항목을 참조하십시오.

시퀀스 또는 시계열 데이터로, 단일 시계열을 나타내는 행렬 또는 여러 개의 시계열을 나타내는 행렬로 구성된 셀형 배열로 지정됩니다.

  • sequences가 단일 시계열을 나타내는 행렬인 경우, sequences는 DxS 행렬로, 여기서 D는 시간 스텝당 데이터 점의 개수이고 S는 시간 스텝의 개수입니다.

  • sequences가 여러 개의 시계열을 나타내는 셀형 배열인 경우, sequences는 Nx1 셀형 배열로, 여기서 N은 관측값의 개수입니다. sequences의 각 요소는 행이 데이터 점에 대응되고 열이 시간 스텝에 대응되는 행렬로 표현되는 시계열입니다.

이름-값 쌍의 인수

예: 'MiniBatchSize',256은 미니 배치 크기를 256으로 지정합니다.

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 작은따옴표(' ') 안에 표시해야 합니다.

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

예: 'MiniBatchSize',256

하드웨어 리소스로, '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' — 각 미니 배치의 시퀀스가 가장 짧은 시퀀스와 길이가 같아지도록 자릅니다.

  • 양의 정수 — 각 미니 배치의 시퀀스가 가장 긴 시퀀스와 길이가 같아지도록 채운 다음, 더 작은 크기의 시퀀스로 분할합니다. 분할이 이루어지면 함수가 미니 배치를 추가로 만듭니다.

함수는 오른쪽에 있는 시퀀스를 채우고 자릅니다. 입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 Sequence Padding, Truncation, and Splitting 항목을 참조하십시오.

예: 'SequenceLength','shortest'

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

예: 'SequencePaddingValue',-1

출력 인수

모두 축소

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

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

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

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

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

작업형식
이미지 회귀
  • NxR 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다.

  • hxwxcxN 숫자형 배열로, 여기서 N은 관측값의 개수이고 hxwxc는 단일 응답 변수의 이미지 크기입니다.

sequence-to-one 회귀NxR 행렬로, 여기서 N은 관측값의 개수이고 R은 응답 변수의 개수입니다.
sequence-to-sequence 회귀

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

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

알고리즘

이미지 데이터에 NaN이 있는 경우, predict가 이 값을 네트워크 전체로 전파합니다. 네트워크에 ReLU 계층이 있으면 해당 계층은 NaN을 무시합니다. 네트워크에 ReLU 계층이 없으면 predict는 NaN을 예측값으로서 반환합니다.

Deep Learning Toolbox™에 포함된 심층 학습 훈련, 예측 및 검증을 위한 모든 함수는 단정밀도 부동소수점 산술을 사용하여 계산을 수행합니다. 심층 학습을 위한 함수에는 trainNetwork, predict, classify, activations가 있습니다. CPU와 GPU를 모두 사용하여 네트워크를 훈련시키는 경우, 단정밀도 산술이 사용됩니다.

대안

classify를 사용하여, 훈련된 네트워크에서 예측 점수와 예측 클래스를 계산할 수 있습니다.

activations를 사용하여 네트워크 계층에서의 활성화 결과를 구할 수 있습니다.

sequence-to-label 및 sequence-to-sequence 분류 네트워크(LSTM 네트워크)의 경우, classifyAndUpdateStatepredictAndUpdateState를 사용하여 네트워크 상태를 예측하고 업데이트할 수 있습니다.

참고 문헌

[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

확장 기능

R2016a에 개발됨