주요 콘텐츠

forward

R2026b

훈련에 사용할 딥러닝 신경망 출력값 계산

설명

일부 딥러닝 계층은 훈련 중과 추론(예측) 중에 서로 다르게 동작합니다. 예를 들어, 훈련 중에는 드롭아웃 계층이 과적합 방지를 돕기 위해 입력 요소를 임의로 0으로 설정하지만, 추론 중에는 드롭아웃 계층이 입력값을 변경하지 않습니다. 이와 유사하게, 배치 정규화 계층은 훈련 중에는 미니 배치 통계량을 사용하여 정규화하지만, 추론 중에는 훈련된 평균 및 분산을 사용합니다.

훈련에 사용할 신경망 출력값을 계산하려면 forward 함수를 사용하십시오. 추론에 사용할 신경망 출력값을 계산하려면 predict 함수를 사용하십시오.

[Y1,...,YN] = forward(net,X1,...,XM)은 입력 데이터 X1, …, XM과 신경망 net이 주어진 경우 훈련에 사용할 신경망 출력값 Y1, …, YN을 반환합니다.

예제

[Y1,...,YN,state] = forward(net,X1,...,XM)은 업데이트된 신경망 상태도 반환합니다.

[Y1,...,YN,state,pruningActivations] = forward(net,X1,...,XM)은 가지치기 계층의 활성화로 구성된 셀형 배열도 반환합니다. 이 구문은 net이 TaylorPrunableNetwork 객체인 경우에만 적용됩니다.

심층 신경망을 가지치기하려면 Deep Learning Toolbox™ Model Compression Library 지원 패키지가 필요합니다. 이 지원 패키지는 애드온 탐색기를 사용하여 다운로드할 수 있는 무료 애드온입니다. 또는 Deep Learning Toolbox Model Compression Library 항목을 참조하십시오.

___ = forward(___,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.

예제

모두 축소

이 예제에서는 사용자 지정 학습률 조정 계획을 사용하여 손으로 쓴 숫자를 분류하는 신경망을 훈련시키는 방법을 보여줍니다.

trainnet 함수와 trainingOptions 함수를 사용하여 대부분의 유형의 신경망을 훈련시킬 수 있습니다. trainingOptions 함수가 필요한 옵션을 제공하지 않는다면(예: 사용자 지정 솔버) 자동 미분을 위한 dlarray 객체와 dlnetwork 객체를 사용하여 자체 사용자 지정 훈련 루프를 정의할 수 있습니다. 사전 훈련된 딥러닝 신경망을 trainnet 함수를 사용하여 다시 훈련시키는 방법을 보여주는 예제는 새 영상 분류를 위해 신경망 다시 훈련시키기 항목을 참조하십시오.

심층 신경망을 훈련시키는 것은 최적화 작업입니다. 신경망을 함수 f(X;θ)(X가 신경망 입력값이고 θ가 학습 가능한 파라미터 세트임)로 취급하면, 훈련 데이터를 바탕으로 어떤 손실 값을 최소화하도록 θ를 최적화할 수 있습니다. 예를 들어, 주어진 입력값 X와 이에 대응하는 목표값 T에 대해 예측값 Y=f(X;θ)와 T 간의 오차를 최소화하도록 학습 가능한 파라미터 θ를 최적화할 수 있습니다.

사용되는 손실 함수는 작업의 유형에 따라 달라집니다. 예를 들면 다음과 같습니다.

  • 분류 작업의 경우 예측값과 목표값 사이의 교차 엔트로피 오차를 최소화할 수 있습니다.

  • 회귀 작업의 경우 예측값과 목표값 사이의 평균제곱오차를 최소화할 수 있습니다.

경사하강법을 사용하여 목적 함수를 최적화할 수 있습니다. 즉, 학습 가능한 파라미터에 대한 손실의 기울기를 사용하여 최소값으로 향하는 스텝을 취하면서 학습 가능한 파라미터 θ를 반복적으로 업데이트하는 방식으로 손실 L을 최소화합니다. 경사하강법 알고리즘은 일반적으로 θt+1=θt-ρ∇L 형식의 업데이트 스텝 변형을 사용하여 학습 가능한 파라미터를 업데이트합니다. 여기서 t는 반복 횟수, ρ는 학습률, ∇L은 기울기(학습 가능한 파라미터에 대한 손실의 도함수)입니다.

이 예제에서는 확률적 경사하강법 알고리즘(모멘텀 없음)을 사용하여 손으로 쓴 숫자를 분류하도록 신경망을 훈련시킵니다.

훈련 데이터 불러오기

imageDatastore 함수를 사용하여 숫자 데이터를 영상 데이터저장소로 불러오고 영상 데이터가 포함된 폴더를 지정합니다.

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

데이터를 훈련 세트와 테스트 세트로 분할합니다. 테스트를 위해 splitEachLabel 함수를 사용하여 데이터의 10%를 남겨 둡니다.

[imdsTrain,imdsTest] = splitEachLabel(imds,0.9,"randomize");

이 예제에 사용된 신경망에는 28×28×1 크기의 입력 영상이 필요합니다. 훈련 영상의 크기를 자동으로 조정하려면 증강 영상 데이터저장소를 사용하십시오. 훈련 영상에 대해 추가로 수행할 증강 연산을 지정합니다. 즉, 가로 축 및 세로 축에서 영상을 최대 5개 픽셀만큼 임의로 평행 이동합니다. 데이터 증강은 신경망이 과적합되는 것을 방지하고 훈련 영상의 정확한 세부 정보가 기억되지 않도록 하는 데 도움이 됩니다.

inputSize = [28 28 1];
pixelRange = [-5 5];

imageAugmenter = imageDataAugmenter( ...
    RandXTranslation=pixelRange, ...
    RandYTranslation=pixelRange);

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain,DataAugmentation=imageAugmenter);

추가적인 데이터 증강을 수행하지 않고 테스트 영상의 크기를 자동으로 조정하려면 증강 영상 데이터저장소를 추가적인 전처리 연산 지정 없이 사용하십시오.

augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);

훈련 데이터의 클래스 개수를 확인합니다.

classes = categories(imdsTrain.Labels);
numClasses = numel(classes);

신경망 정의하기

영상 분류를 위한 신경망을 정의합니다.

  • 영상 입력값의 경우 훈련 데이터와 일치하는 입력 크기를 갖는 영상 입력 계층을 지정합니다.

  • 영상 입력값을 정규화하지 않도록 입력 계층의 Normalization 옵션을 "none"으로 설정합니다.

  • 3개의 convolution-batchnorm-ReLU 블록을 지정합니다.

  • Padding 옵션을 "same"으로 설정하여 컨벌루션 계층의 입력값에 채우기를 수행하여, 출력값이 동일한 크기가 되도록 합니다.

  • 첫 번째 컨벌루션 계층에 크기가 5인 필터 20개를 지정합니다. 나머지 컨벌루션 계층에는 크기가 3인 필터 20개를 지정합니다.

  • 분류를 위해 클래스 개수와 일치하는 크기의 완전 연결 계층을 지정합니다.

  • 출력값을 확률에 매핑하기 위해 소프트맥스 계층을 포함시킵니다.

사용자 지정 훈련 루프를 사용하여 신경망을 훈련시키는 경우 출력 계층을 포함시키지 마십시오.

layers = [
    imageInputLayer(inputSize,Normalization="none")
    convolution2dLayer(5,20,Padding="same")
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,20,Padding="same")
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,20,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer];

계층 배열에서 dlnetwork 객체를 만듭니다.

net = dlnetwork(layers)
net = 
  dlnetwork with properties:

         Layers: [12×1 nnet.cnn.layer.Layer]
    Connections: [11×2 table]
     Learnables: [14×3 table]
          State: [6×3 table]
     InputNames: {'imageinput'}
    OutputNames: {'softmax'}
    Initialized: 1

  View summary with summary.

모델 손실 함수 정의하기

심층 신경망을 훈련시키는 것은 최적화 작업입니다. 신경망을 함수 f(X;θ)(X가 신경망 입력값이고 θ가 학습 가능한 파라미터 세트임)로 취급하면, 훈련 데이터를 바탕으로 어떤 손실 값을 최소화하도록 θ를 최적화할 수 있습니다. 예를 들어, 주어진 입력값 X와 이에 대응하는 목표값 T에 대해 예측값 Y=f(X;θ)와 T 간의 오차를 최소화하도록 학습 가능한 파라미터 θ를 최적화할 수 있습니다.

modelLoss 함수를 정의합니다. modelLoss 함수는 dlnetwork 객체 net와, 입력 데이터 X 및 이에 대응하는 목표값 T의 미니 배치를 받습니다. 그리고 손실, net의 학습 가능한 파라미터에 대한 손실의 기울기 및 신경망 상태를 반환합니다. 기울기를 자동으로 계산하기 위해 dlgradient 함수를 사용합니다.

function [loss,gradients,state] = modelLoss(net,X,T)

% Forward data through network.
[Y,state] = forward(net,X);

% Calculate cross-entropy loss.
loss = crossentropy(Y,T);

% Calculate gradients of loss with respect to learnable parameters.
gradients = dlgradient(loss,net.Learnables);

end

SGD 함수 정의하기

함수 sgdStep을 만듭니다. 이 함수는 파라미터와 파라미터에 대한 손실의 기울기를 받고, θt+1=θt-ρ∇L로 표현되는 확률적 경사하강법 알고리즘을 사용하여 업데이트된 파라미터를 반환합니다. 여기서 t는 반복 횟수, ρ는 학습률, ∇L은 기울기(학습 가능한 파라미터에 대한 손실의 도함수)입니다.

function parameters = sgdStep(parameters,gradients,learnRate)

parameters = parameters - learnRate .* gradients;

end

사용자 지정 업데이트 함수를 정의하는 것은 사용자 지정 훈련 루프에 필요한 단계는 아닙니다. 그 대신에 sgdmupdate, adamupdate, rmspropupdate 같은 내장 업데이트 함수를 사용할 수 있습니다.

훈련 옵션 지정하기

미니 배치 크기 128, 학습률 0.01로 Epoch 15회만큼 훈련시킵니다.

numEpochs = 15;
miniBatchSize = 128;
learnRate = 0.01;

모델 훈련시키기

훈련시키는 동안 영상의 미니 배치를 처리하고 관리하는 minibatchqueue 객체를 만듭니다. 각 미니 배치에 대해 다음을 수행합니다.

  • 사용자 지정 미니 배치 전처리 함수 preprocessMiniBatch(이 예제의 마지막 부분에 정의되어 있음)를 사용하여 목표값을 one-hot 형식으로 인코딩된 벡터로 변환합니다.

  • 각각 공간(spatial), 공간(spatial), 채널(channel), 배치(batch)를 뜻하는 차원 레이블 "SSCB"를 사용하여 영상 데이터의 형식을 지정합니다. 기본적으로 minibatchqueue 객체는 기본 유형 single을 사용하여 데이터를 dlarray 객체로 변환합니다. 목표값의 형식은 지정하지 않습니다.

  • 부분 미니 배치는 버립니다.

  • 사용 가능한 GPU가 있으면 GPU에서 훈련시킵니다. 사용 가능한 GPU가 있으면 minibatchqueue 객체는 기본적으로 각 출력값을 gpuArray로 변환합니다. GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오.

mbq = minibatchqueue(augimdsTrain,...
    MiniBatchSize=miniBatchSize,...
    MiniBatchFcn=@preprocessMiniBatch,...
    MiniBatchFormat=["SSCB" ""], ...
    PartialMiniBatch="discard");

훈련 진행 상황 모니터의 총 반복 횟수를 계산합니다.

numObservationsTrain = numel(imdsTrain.Files);
numIterationsPerEpoch = floor(numObservationsTrain / miniBatchSize);
numIterations = numEpochs * numIterationsPerEpoch;

TrainingProgressMonitor 객체를 초기화합니다. monitor 객체를 생성할 때 타이머가 시작되므로 이 객체를 훈련 루프와 가깝게 생성해야 합니다.

monitor = trainingProgressMonitor( ...
    Metrics="Loss", ...
    Info="Epoch", ...
    XLabel="Iteration");

사용자 지정 훈련 루프를 사용하여 신경망을 훈련시킵니다. 각 Epoch마다 데이터를 섞고 루프를 사용해 데이터의 미니 배치를 순회합니다. 각 미니 배치에 대해 다음을 수행합니다.

  • dlfeval 함수와 modelLoss 함수를 사용하여 모델의 손실, 기울기, 상태를 평가하고 신경망 상태를 업데이트합니다.

  • 사용자 지정 업데이트 함수에 dlupdate 함수를 사용하여 신경망 파라미터를 업데이트합니다.

  • 훈련 진행 상황 모니터에서 손실 값과 Epoch 값을 업데이트합니다.

  • 모니터의 Stop 속성이 true이면 중지합니다. 중지 버튼을 클릭하면 TrainingProgressMonitor 객체의 Stop 속성값이 true로 변경됩니다.

epoch = 0;
iteration = 0;

% Loop over epochs.
while epoch < numEpochs && ~monitor.Stop
    
    epoch = epoch + 1;

    % Shuffle data.
    shuffle(mbq);
    
    % Loop over mini-batches.
    while hasdata(mbq) && ~monitor.Stop

        iteration = iteration + 1;
        
        % Read mini-batch of data.
        [X,T] = next(mbq);
        
        % Evaluate the model gradients, state, and loss using dlfeval and the
        % modelLoss function and update the network state.
        [loss,gradients,state] = dlfeval(@modelLoss,net,X,T);
        net.State = state;
        
        % Update the network parameters using SGD.
        updateFcn = @(parameters,gradients) sgdStep(parameters,gradients,learnRate);
        net = dlupdate(updateFcn,net,gradients);
        
        % Update the training progress monitor.
        recordMetrics(monitor,iteration,Loss=loss);
        updateInfo(monitor,Epoch=epoch);
        monitor.Progress = 100 * iteration/numIterations;
    end
end

모델 테스트하기

testnet 함수를 사용하여 신경망을 테스트합니다. 단일 레이블 분류의 경우 정확도를 평가합니다. 정확도는 올바른 예측의 비율입니다. 기본적으로 testnet 함수는 GPU를 사용할 수 있으면 GPU를 사용합니다. 실행 환경을 수동으로 선택하려면 testnet 함수의 ExecutionEnvironment 인수를 사용하십시오.

accuracy = testnet(net,augimdsTest,"accuracy")
accuracy = 
96.3000

예측값을 혼동행렬 차트로 시각화합니다. minibatchpredict 함수를 사용하여 예측을 수행하고 scores2label 함수를 사용하여 분류 점수를 레이블로 변환합니다. 기본적으로 minibatchpredict 함수는 GPU를 사용할 수 있으면 GPU를 사용합니다. 실행 환경을 수동으로 선택하려면 minibatchpredict 함수의 ExecutionEnvironment 인수를 사용하십시오.

scores = minibatchpredict(net,augimdsTest);
YTest = scores2label(scores,classes);

예측값을 혼동행렬 차트로 시각화합니다.

TTest = imdsTest.Labels;
figure
confusionchart(TTest,YTest)

대각선에 있는 값이 크면 해당 클래스에 대한 예측이 정확함을 나타냅니다. 대각선을 벗어난 값이 크면 해당 클래스 간의 혼동이 심각함을 나타냅니다.

지원 함수

미니 배치 전처리 함수

preprocessMiniBatch 함수는 다음 단계를 사용하여 예측 변수와 레이블의 미니 배치를 전처리합니다.

  1. preprocessMiniBatchPredictors 함수를 사용하여 영상을 전처리합니다.

  2. 입력되는 셀형 배열에서 레이블 데이터를 추출하여 두 번째 차원을 따라 categorical형 배열로 결합합니다.

  3. categorical형 레이블을 숫자형 배열로 one-hot 형식으로 인코딩합니다. 첫 번째 차원으로 인코딩하면 신경망 출력값의 형태와 일치하는 인코딩된 배열이 생성됩니다.

function [X,T] = preprocessMiniBatch(dataX,dataT)

% Preprocess predictors.
X = preprocessMiniBatchPredictors(dataX);

% Extract label data from cell and concatenate.
T = cat(2,dataT{:});

% One-hot encode labels.
T = onehotencode(T,1);

end

미니 배치 예측 변수 전처리 함수

preprocessMiniBatchPredictors 함수는 입력 셀형 배열에서 영상 데이터를 추출한 후 숫자형 배열로 결합하여 예측 변수의 미니 배치를 전처리합니다. 회색조 입력값의 경우 네 번째 차원으로 결합하면 각 영상에 세 번째 차원이 추가되어 한원소 채널 차원으로 사용됩니다.

function X = preprocessMiniBatchPredictors(dataX)

% Concatenate.
X = cat(4,dataX{:});

end

입력 인수

모두 축소

신경망으로, 다음 값 중 하나로 지정됩니다.

심층 신경망을 가지치기하려면 Deep Learning Toolbox Model Compression Library 지원 패키지가 필요합니다. 이 지원 패키지는 애드온 탐색기를 사용하여 다운로드할 수 있는 무료 애드온입니다. 또는 Deep Learning Toolbox Model Compression Library 항목을 참조하십시오.

입력 데이터로, 다음 값 중 하나로 지정됩니다.

  • 형식이 지정된 dlarray 객체

  • 형식이 지정되지 않은 dlarray 객체 (R2025a 이후)

  • 숫자형 배열 (R2025a 이후)

입력값 Xi는 신경망 입력값 net.InputNames(i)에 대응됩니다.

자동 미분을 사용하는 사용자 지정 훈련 루프를 통해 신경망을 훈련시키려면, 입력 데이터는 형식이 지정된 또는 형식이 지정되지 않은 dlarray 객체여야 합니다.

팁

신경망에는 특정 레이아웃의 입력 데이터가 필요합니다. 예를 들어 벡터 시퀀스 분류 신경망에서 벡터 시퀀스 표현은 일반적으로 t×c 배열이어야 합니다. 여기서 t와 c는 각각 시퀀스의 시간 스텝 개수와 채널 개수입니다. 일반적으로 신경망에는 필요한 데이터 레이아웃을 지정하는 입력 계층이 있습니다.

대부분의 데이터저장소와 함수는 신경망에 필요한 레이아웃으로 데이터를 출력합니다. 데이터의 레이아웃이 신경망에 필요한 것과 다른 경우 InputDataFormats 옵션을 사용하거나 입력 데이터를 형식이 지정된 dlarray 객체로 지정하여 데이터의 레이아웃이 다르다는 것을 나타내십시오. 보통 InputDataFormats 훈련 옵션을 조정하는 편이 입력 데이터를 전처리하는 것보다 쉽습니다.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

형식이 지정되지 않은 데이터를 받는 신경망을 만들려면 inputLayer 객체를 사용하고 형식을 지정하지 마십시오. 형식이 지정되지 않은 데이터를 신경망에 바로 입력하려면 InputDataFormats 인수를 지정하지 마십시오 (R2025a 이후).

R2025a 이전: 입력 계층이 없는 신경망의 경우 InputDataFormats 인수를 사용하여 형식을 지정해야 합니다.

이름-값 인수

모두 축소

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

예: forward(net,X,Outputs=["relu1" "relu2"])는 이름이 "relu1" 및 "relu2"인 계층에서 출력값을 추출하도록 지정합니다.

신경망 출력값으로, string형 배열 또는 계층 이름이나 계층 출력 경로의 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 다음 형식 중 하나를 사용하여 출력값을 지정하십시오.

  • "layerName". 여기서 layerName은 단일 출력값을 갖는 계층의 이름입니다.

  • "layerName/outputName". 여기서 layerName은 계층의 이름이고 outputName은 계층 출력의 이름입니다. 출력값이 여러 개 있는 계층에 이 옵션을 사용하십시오.

networkLayer 객체 내 계층의 출력값을 사용하려면 먼저 expandLayers 함수를 사용하여 중첩 신경망을 확장하십시오. 자세한 내용은 신경망 계층 팁 항목을 참조하십시오.

출력값을 추출할 계층을 지정하지 않으면 기본적으로 net.Outputs에 지정된 출력값이 사용됩니다.

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

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

  • "none" – 모든 최적화를 비활성화합니다.

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

R2025a 이후

입력 데이터 차원에 대한 설명으로, 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 인수를 사용하여 형식을 지정해야 합니다.

데이터형: char | string | cell

R2025a 이후

출력 데이터 차원에 대한 설명으로, 다음 값 중 하나로 지정됩니다.

  • "auto" — 데이터 레이아웃을 자동으로 결정합니다.

    • 신경망이 형식 지정된 데이터를 출력할 경우, 함수는 형식 지정된 dlarray를 직접 반환합니다.

    • 신경망이 입력 데이터와 동일한 차원 수를 갖는, 형식이 지정되지 않은 데이터를 출력할 경우, 함수는 InputDataFormats 순서를 사용합니다.

    • 신경망이 입력 데이터와 다른 차원 수를 갖는, 형식이 지정되지 않은 데이터를 출력할 경우, 함수는 배치 및 시간 차원이 채널 차원보다 앞에 오도록 출력 차원을 정렬합니다. 예를 들어, 채널 및 배치 출력 차원을 갖는 신경망의 경우 출력 배열의 크기는 numObservations×numChannels입니다. 이 순서는 "C"(채널) 차원이 "B"(배치) 및 "T"(시간) 차원보다 앞에 오는 디폴트 dlarray 차원 순서와 다릅니다.

  • string형, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열 — forward 함수는 지정된 데이터 형식을 사용합니다.

딥러닝 데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다. 문자는 다음을 나타냅니다.

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 나타내는 배열이 있다고 가정하겠습니다. 데이터를 "CBT"(채널, 배치, 시간) 형식으로 설명할 수 있습니다.

"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

데이터형: char | string | cell

출력 인수

모두 축소

여러 개의 출력값을 갖는 신경망의 출력 데이터로, 다음 값 중 하나로 반환됩니다.

  • 형식이 지정된 dlarray 객체

  • 형식이 지정되지 않은 dlarray 객체 (R2025a 이후)

  • 숫자형 배열 (R2025a 이후)

데이터형은 입력 데이터의 데이터형과 일치합니다.

출력값 Y1, …, YN의 순서는 Outputs 인수로 지정된 출력값 순서와 일치합니다.

분류 신경망의 경우 출력 요소는 각 클래스의 점수에 대응됩니다. 점수 순서는 훈련 데이터의 범주 순서와 일치합니다. 예를 들어 categorical형 레이블 TTrain을 사용하여 신경망을 훈련시킬 경우 점수 순서는 categories(TTrain)에 의해 지정된 범주 순서와 일치합니다.

업데이트된 신경망 상태로, 테이블로 반환됩니다.

신경망 상태는 다음 3개의 열을 가진 테이블입니다.

  • Layer – 계층 이름으로, string형 스칼라로 지정됩니다.

  • Parameter – 상태 파라미터 이름으로, string형 스칼라로 지정됩니다.

  • Value – 상태 파라미터 값으로, dlarray 객체로 지정됩니다.

계층 연산 동안 계산된 정보는 계층 상태에서 유지되어 그 계층의 후속하는 순방향 통과에 사용됩니다. 예를 들어, LSTM 계층은 셀 상태와 은닉 상태를 포함하고 배치 정규화 계층은 동적 통계량(running statistics)을 계산합니다.

HasStateInputs 속성이 1(true)로 설정된 순환 계층(예: LSTM 계층)의 경우 상태 테이블은 계층의 상태에 대한 항목을 포함하지 않습니다.

dlnetwork의 상태는 State 속성을 사용하여 업데이트하십시오.

입력 신경망이 TaylorPrunableNetwork 객체인 경우 가지치기 계층의 활성화로 구성된 셀형 배열입니다.

확장 기능

모두 확장

버전 내역

R2019b에 개발됨

모두 확장