predict
추론에 사용할 딥러닝 신경망 출력값 계산
설명
일부 딥러닝 계층은 훈련 중과 추론(예측) 중에 서로 다르게 동작합니다. 예를 들어, 훈련 중에는 드롭아웃 계층이 과적합 방지를 돕기 위해 입력 요소를 임의로 0으로 설정하지만, 추론 중에는 드롭아웃 계층이 입력값을 변경하지 않습니다.
예제
사전 훈련된 SqueezeNet 신경망을 작업 공간에 불러옵니다.
[net,classNames] = imagePretrainedNetwork;
PNG 파일에서 영상을 읽어 들이고 분류합니다. 영상을 분류하기 위해 먼저 영상을 single형으로 변환합니다.
im = imread("peppers.png");
figure
imshow(im)
X = single(im); scores = predict(net,X); [label,score] = scores2label(scores,classNames);
영상을 예측 레이블 및 그에 대응되는 점수와 함께 표시합니다.
figure imshow(im) title(string(label) + " (Score: " + score + ")")

입력 인수
신경망으로, 다음 값 중 하나로 지정됩니다.
dlnetwork객체 — 사용자 지정 훈련 루프를 위한 신경망.TaylorPrunableNetwork객체 — 사용자 지정 가지치기 루프를 위한 신경망.
심층 신경망을 가지치기하려면 Deep Learning Toolbox™ Model Compression Library 지원 패키지가 필요합니다. 이 지원 패키지는 애드온 탐색기를 사용하여 다운로드할 수 있는 무료 애드온입니다. 또는 Deep Learning Toolbox Model Compression Library 항목을 참조하십시오.
입력 데이터로, 다음 값 중 하나로 지정됩니다.
형식이 지정된
dlarray객체형식이 지정되지 않은
dlarray객체 (R2023b 이후)숫자형 배열 (R2023b 이후)
팁
신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어 벡터 시퀀스 분류 신경망에서 벡터 시퀀스 표현은 일반적으로 t×c 배열이어야 합니다. 여기서 t와 c는 각각 시퀀스의 시간 스텝 개수와 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.
대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 옵션을 사용하거나 입력 데이터를 형식이 지정된 dlarray 객체로 지정하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 보통 InputDataFormats 훈련 옵션을 조정하는 편이 입력 데이터를 전처리하는 것보다 쉽습니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
형식이 지정되지 않은 데이터를 받는 신경망을 만들려면 inputLayer 객체를 사용하고 형식을 지정하지 마십시오. 형식이 지정되지 않은 데이터를 신경망에 바로 입력하려면 InputDataFormats 인수를 지정하지 마십시오. (R2025a 이후)
R2025a 이전: 입력 계층이 없는 신경망의 경우 InputDataFormats 인수를 사용하여 형식을 지정하거나 형식이 지정된 dlarray 객체를 입력값으로 사용해야 합니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.
예: Y = predict(net,X,InputDataFormats="CBT")는 "CBT"(채널, 배치, 시간) 형식의 시퀀스 데이터를 사용하여 예측을 수행합니다.
신경망 출력값으로, string형 배열 또는 계층 이름이나 계층 출력 경로의 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 다음 형식 중 하나를 사용하여 출력값을 지정하십시오.
"layerName". 여기서layerName은 단일 출력값을 갖는 계층의 이름입니다."layerName/outputName". 여기서layerName은 계층의 이름이고outputName은 계층 출력의 이름입니다. 출력값이 여러 개 있는 계층에 이 옵션을 사용하십시오.
networkLayer 객체 내 계층의 출력값을 사용하려면 먼저 expandLayers 함수를 사용하여 중첩 신경망을 확장하십시오.
출력값을 추출할 계층을 지정하지 않으면 기본적으로 net.Outputs에 지정된 출력값이 사용됩니다.
R2023b 이후
입력 데이터 차원에 대한 설명으로, string형 배열, 문자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.
InputDataFormats가 "auto"이면 신경망 입력에 필요한 형식이 사용됩니다. 그렇지 않으면 해당 신경망 입력에 대해 지정된 형식이 사용됩니다.
데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.
문자는 다음을 나타냅니다.
"S"— 공간"C"— 채널"B"— 배치"T"— 시간"U"— 지정되지 않음
예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 나타내는 배열이 있다고 가정하겠습니다. 데이터를 "CBT"(채널, 배치, 시간) 형식으로 설명할 수 있습니다.
"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.
복수의 입력값이 포함된 net을 사용하는 신경망인 경우, 입력 데이터 형식으로 구성된 배열을 지정하십시오. 여기서 InputDataFormats(i)는 입력값 net.InputNames(i)에 대응됩니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
형식이 지정되지 않은 데이터를 받는 신경망을 만들려면 inputLayer 객체를 사용하고 형식을 지정하지 마십시오. 형식이 지정되지 않은 데이터를 신경망에 바로 입력하려면 InputDataFormats 인수를 지정하지 마십시오. (R2025a 이후)
R2025a 이전: 입력 계층이 없는 신경망의 경우 InputDataFormats 인수를 사용하여 형식을 지정하거나 형식이 지정된 dlarray 객체를 입력값으로 사용해야 합니다.
데이터형: char | string | cell
R2023b 이후
출력 데이터 차원에 대한 설명으로, 다음 값 중 하나로 지정됩니다.
"auto"— 출력 데이터의 차원 수가 입력 데이터와 동일한 경우predict함수는InputDataFormats에서 지정한 형식을 사용합니다. 출력 데이터의 차원 수가 입력 데이터와 다른 경우predict함수는 출력 데이터의 차원이 신경망 입력 계층 또는InputDataFormats값과 일치하도록 출력 데이터의 차원을 자동으로 치환합니다.string형, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열 —
predict함수는 지정된 데이터 형식을 사용합니다.
데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.
문자는 다음을 나타냅니다.
"S"— 공간"C"— 채널"B"— 배치"T"— 시간"U"— 지정되지 않음
예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 나타내는 배열이 있다고 가정하겠습니다. 데이터를 "CBT"(채널, 배치, 시간) 형식으로 설명할 수 있습니다.
"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
데이터형: char | string | cell
성능 최적화로, 다음 값 중 하나로 지정됩니다.
"auto"— 입력 신경망 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다."mex"— MEX 함수를 컴파일하고 실행합니다. 이 옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. 입력 데이터 또는 신경망의 학습 가능한 파라미터를gpuArray객체로 저장해야 합니다. GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다."none"— 모든 가속을 비활성화합니다.
"auto" 또는 "mex" 옵션을 사용하면 초기 실행 시간이 늘어나는 대신 성능이 향상될 수 있습니다. 일반적으로 함수에 대한 후속 호출의 속도가 더 빨라집니다. 성능 최적화는 서로 다른 입력 데이터를 사용하여 함수를 여러 번 호출하는 경우에 사용하십시오.
Acceleration이 "mex"이면 모델과 함수 호출에서 지정한 파라미터에 따라 MEX 함수를 생성하고 실행합니다. 단일 모델에 한 번에 여러 개의 MEX 함수가 연결되어 있을 수 있습니다. 모델 변수를 지우면 해당 모델에 연결된 모든 MEX 함수도 지워집니다.
Acceleration이 "auto"이면 MEX 함수가 생성되지 않습니다.
"mex" 옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. C/C++ 컴파일러가 설치되어 있어야 하며 GPU Coder™ Interface for Deep Learning 지원 패키지가 필요합니다. MATLAB®의 애드온 탐색기를 사용하여 지원 패키지를 설치하십시오. 설정 지침은 컴파일러 설정하기 (GPU Coder) 항목을 참조하십시오. GPU Coder는 필요하지 않습니다.
"mex" 옵션에는 다음과 같은 제한 사항이 있습니다.
state출력 인수는 지원되지 않습니다.single정밀도만 지원됩니다. 입력 데이터 또는 신경망의 학습 가능한 파라미터의 기본 유형은single형이어야 합니다.입력 계층과 연결되지 않은 입력이 있는 신경망은 지원되지 않습니다.
추적되는
dlarray객체는 지원되지 않습니다. 즉,dlfeval호출 내에서는"mex"옵션이 지원되지 않습니다.일부 계층은 지원되지 않습니다. 지원되는 계층 목록은 지원되는 계층 (GPU Coder) 항목을 참조하십시오.
"mex"옵션을 사용할 경우 MATLAB Compiler™는 신경망 배포를 지원하지 않습니다.
양자화된 신경망의 경우, "mex" 옵션을 사용하려면 Compute Capability 6.1, 6.3 또는 그 이상을 갖춘 CUDA® 지원 NVIDIA® GPU가 필요합니다.
출력 인수
여러 개의 출력값을 갖는 신경망의 출력 데이터로, 다음 값 중 하나로 반환됩니다.
형식이 지정된
dlarray객체형식이 지정되지 않은
dlarray객체 (R2023b 이후)숫자형 배열 (R2023b 이후)
데이터형은 입력 데이터의 데이터형과 일치합니다.
출력값 Y1, …, YN의 순서는 Outputs 인수로 지정된 출력값 순서와 일치합니다.
분류 신경망의 경우 출력 요소는 각 클래스의 점수에 대응됩니다. 점수 순서는 훈련 데이터의 범주 순서와 일치합니다. 예를 들어 categorical형 레이블 TTrain을 사용하여 신경망을 훈련시킬 경우 점수 순서는 categories(TTrain)에 의해 지정된 범주 순서와 일치합니다.
업데이트된 신경망 상태로, 테이블로 반환됩니다.
신경망 상태는 다음 3개의 열을 가진 테이블입니다.
Layer– 계층 이름으로, string형 스칼라로 지정됩니다.Parameter– 상태 파라미터 이름으로, string형 스칼라로 지정됩니다.Value– 상태 파라미터 값으로,dlarray객체로 지정됩니다.
계층 연산 동안 계산된 정보는 계층 상태에서 유지되어 그 계층의 후속하는 순방향 통과에 사용됩니다. 예를 들어, LSTM 계층은 셀 상태와 은닉 상태를 포함하고 배치 정규화 계층은 동적 통계량(running statistics)을 계산합니다.
HasStateInputs 속성이 1(true)로 설정된 순환 계층(예: LSTM 계층)의 경우 상태 테이블은 계층의 상태에 대한 항목을 포함하지 않습니다.
알고리즘
최상의 성능을 위해 MATLAB에서 GPU를 사용해 딥러닝을 실행한다고 해도 성능이 반드시 보장되는 것은 아닙니다. 신경망 아키텍처에 따라 GPU를 사용하여 두 개의 같은 신경망을 훈련시키거나 동일한 신경망 및 데이터를 사용하여 두 개의 예측값을 생성할 때 조건에 따라 결과가 달라질 수 있습니다. GPU를 사용하여 딥러닝 연산을 수행할 때 결정성(determinism)이 필요한 경우 deep.gpu.deterministicAlgorithms 함수 (R2024b 이후)를 사용하십시오.
rng 함수를 사용하여 동일한 난수 생성기와 시드값을 설정하는 경우 CPU를 사용하여 생성된 예측값은 재현할 수 있습니다.
확장 기능
사용법 관련 참고 및 제한 사항:
C++ 코드 생성 시에 다음과 같은 구문이 지원됩니다.
Y = predict(net,X)Y = predict(net,X1,...,XM)[Y1,...,YN] = predict(__)[Y1,...,YK] = predict(__,'Outputs',layerNames)
구문
[__,state] = predict(__)에 대해 타사 라이브러리에 종속되지 않는 제네릭 C/C++ 코드를 생성할 수 있습니다.코드 생성 시
State속성의 변수Value를 조정할 수 있습니다. 코드 생성 시State속성의 변수Layer와Parameter를 수정하는 것은 지원되지 않습니다.코드 생성 시
State속성에 대해 다음 함수가 지원됩니다.Simulink 시뮬레이션의 경우 코드 생성 시 MATLAB Function 블록에서
dlnetwork의State를 추출하고 업데이트하는 것은 지원되지 않습니다. 대신 Stateful Predict 블록 또는 Stateful Classify 블록을 사용하십시오.입력 데이터
X는 시간("T") 차원에서만 가변 크기를 가질 수 있습니다. 입력 데이터X의 기타 데이터 차원은 가변 크기를 가질 수 없습니다. 크기는 코드 생성 시점에 고정되어야 합니다.코드 생성 시 복소수 입력값을
dlnetwork객체의predict메서드에 전달하는 것은 지원되지 않습니다.predict메서드에 대한dlarray입력은single데이터형이어야 합니다.
사용법 관련 참고 및 제한 사항:
GPU 코드 생성 시에 다음과 같은 구문이 지원됩니다.
Y = predict(net,X)Y = predict(net,X1,...,XM)[Y1,...,YN] = predict(__)[Y1,...,YK] = predict(__,'Outputs',layerNames)
구문
[__,state] = predict(__)에 대해 딥러닝 라이브러리에 독립적인 일반 CUDA 코드를 생성할 수 있습니다.코드 생성 시
State속성의 변수Value를 조정할 수 있습니다. 코드 생성 시State속성의 변수Layer와Parameter를 수정하는 것은 지원되지 않습니다.코드 생성 시
State속성에 대해 다음 함수가 지원됩니다.Simulink 시뮬레이션의 경우 코드 생성 시 MATLAB Function 블록에서
dlnetwork의State를 추출하고 업데이트하는 것은 지원되지 않습니다. 대신 Stateful Predict 블록 또는 Stateful Classify 블록을 사용하십시오.입력 데이터
X는 시간("T") 차원에서만 가변 크기를 가질 수 있습니다. 입력 데이터X의 기타 데이터 차원은 가변 크기를 가질 수 없습니다. 크기는 코드 생성 시점에 고정되어야 합니다.TensorRT 라이브러리에 대한 코드 생성 시
[Y1,...,YK] = predict(__,'Outputs',layerNames)구문을 사용하여 입력 계층을 출력값으로 표시하는 것은 지원되지 않습니다.코드 생성 시 복소수 입력값을
dlnetwork객체의predict메서드에 전달하는 것은 지원되지 않습니다.predict메서드에 대한dlarray입력은single데이터형이어야 합니다.
predict 함수는 GPU 배열 입력값을 지원하지만 다음과 같은 사용법 관련 참고 및 제한 사항이 있습니다.
다음 조건 중 하나 이상에 해당하는 경우 이 함수는 GPU에서 실행됩니다.
net.Learnables.Value내에 있는 신경망의 학습 가능한 파라미터 값이 기본 데이터형gpuArray를 갖는dlarray객체인 경우.입력 인수
X가 기본 데이터형이gpuArray인dlarray인 경우.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2019b에 개발됨형식이 지정되지 않은 데이터를 신경망에 입력값으로 지정할 때 InputDataFormats 인수를 지정하지 않으면, 이 함수는 형식이 지정되지 않은 데이터를 신경망에 바로 전달합니다.
형식이 지정되지 않은 데이터를 받는 신경망을 만들려면 inputLayer 객체를 사용하고 형식을 지정하지 마십시오.
숫자형 배열과 형식이 지정되지 않은 dlarray 객체를 사용하여 예측을 수행할 수 있습니다.
InputDataFormats 옵션 및 OutputDataFormats 옵션을 사용하여 각각 입력 데이터와 출력 데이터 형식을 지정할 수 있습니다.
dlnetwork 객체의 경우 predict 함수로 반환된 state 출력 인수는 신경망의 각 계층에 대한 상태 파라미터 이름과 값이 포함된 테이블입니다.
R2021a부터 상태 값은 dlarray 객체입니다. 이 변경으로 AcceleratedFunction 객체를 사용할 때 더 나은 지원이 제공됩니다. 신경망 상태가 포함된 입력값처럼 입력값이 자주 변경되는 딥러닝 함수를 가속화하려면 자주 변경되는 값을 dlarray 객체로 지정해야 합니다.
이전 버전에서는 상태 값이 숫자형 배열입니다.
대부분의 경우 코드를 업데이트할 필요가 없습니다. 상태 값이 숫자형 배열이어야 하는 코드를 사용할 때 이전 동작을 재현하려면 extractdata 함수와 dlupdate 함수를 함께 사용하여 상태 값에서 데이터를 수동으로 추출하십시오.
state = dlupdate(@extractdata,net.State);
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)