주요 콘텐츠

dlnetwork

딥러닝 신경망

설명

dlnetwork 객체는 딥러닝 신경망 아키텍처를 지정합니다.

대부분의 딥러닝 작업의 경우, 사전 훈련된 신경망을 사용하고 이를 사용자 자신의 데이터에 맞게 적응시킬 수 있습니다. 새로운 영상 세트를 분류할 수 있도록 전이 학습을 사용하여 컨벌루션 신경망을 다시 훈련시키는 방법을 보여주는 예제는 Retrain Neural Network to Classify New Images 항목을 참조하십시오. 또는 trainnet 함수와 trainingOptions 함수를 사용하여 신경망을 처음부터 만들고 훈련시킬 수 있습니다.

trainingOptions 함수가 작업에 필요한 훈련 옵션을 제공하지 않는다면 자동 미분을 사용하여 사용자 지정 훈련 루프를 만들 수 있습니다. 자세한 내용은 사용자 지정 훈련 루프를 사용하여 신경망 훈련시키기 항목을 참조하십시오.

trainnet 함수가 작업에 필요한 손실 함수를 제공하지 않는다면 사용자 지정 손실 함수를 trainnet에 함수 핸들로 지정할 수 있습니다. 예측값과 목표값보다 더 많은 입력값이 필요한 손실 함수(예: 신경망 또는 추가 입력값에 액세스해야 하는 손실 함수)의 경우 사용자 지정 훈련 루프를 사용하여 모델을 훈련시킵니다. 자세한 내용은 사용자 지정 훈련 루프를 사용하여 신경망 훈련시키기 항목을 참조하십시오.

Deep Learning Toolbox™가 작업에 필요한 계층을 제공하지 않는다면 사용자 지정 계층을 만들 수 있습니다. 자세한 내용은 사용자 지정 딥러닝 계층 정의하기 항목을 참조하십시오. 계층 신경망으로 지정할 수 없는 모델의 경우 모델을 함수로 정의할 수 있습니다. 자세한 내용은 Train Network Using Model Function 항목을 참조하십시오.

어느 훈련 방법을 어느 작업에 사용해야 하는지에 대한 자세한 내용은 Train Deep Learning Model in MATLAB 항목을 참조하십시오.

생성

설명

빈 신경망

net = dlnetwork는 계층이 없는 dlnetwork 객체를 만듭니다. 신경망을 처음부터 만들려면 이 구문을 사용하십시오. (R2024a 이후)

예제

입력 계층이 있는 신경망

net = dlnetwork(layers)는 지정된 계층을 사용하여 신경망을 만들고 설정되지 않은 학습 가능한 파라미터와 상태 파라미터를 초기화합니다. 이 구문은 layers의 입력 계층을 사용하여 신경망의 학습 가능한 파라미터와 상태 파라미터의 크기와 형식을 결정합니다.

layers가 완전한 단일 입력 신경망을 정의하고 계층이 직렬로 배열되어 있으며 입력 계층이 있는 경우, 이 구문을 사용하십시오.

예제

net = dlnetwork(layers,OutputNames=names)OutputNames 속성도 설정합니다. OutputNames 속성은 계층을 지정하거나, 신경망 출력값에 대응하는 계층 출력값을 지정합니다.

layers가 완전한 단일 입력 다중 출력 신경망을 정의하고 계층이 직렬로 배열되어 있으며 입력 계층이 있는 경우, 이 구문을 사용하십시오.

net = dlnetwork(layers,Initialize=tf)는 신경망의 학습 가능한 파라미터와 상태 파라미터를 초기화할지를 지정합니다. tf1(true)인 경우 이 구문은 net = dlnetwork(layers)와 동일합니다. tf0(false)인 경우 이 구문은 빈 신경망을 만든 다음 addLayers 함수를 사용하여 layers를 추가하는 것과 동일합니다.

미연결 입력이 있는 신경망

net = dlnetwork(layers,X1,...,XN)은 지정된 계층을 사용하여 신경망을 만들고 설정되지 않은 학습 가능한 파라미터와 상태 파라미터를 초기화합니다. 이 구문은 network data layout 객체 또는 표본 입력값 X1,...,XN을 사용하여 신경망의 학습 가능한 파라미터와 상태 값의 크기와 형식을 결정합니다. 여기서 N은 신경망 입력값의 개수입니다.

layers가 완전한 신경망을 정의하고 계층이 직렬로 배열되어 있으며 입력 계층과 연결되지 않은 입력이 있는 경우, 이 구문을 사용하십시오.

net = dlnetwork(layers,X1,...,XN,OutputNames=names)OutputNames 속성도 설정합니다.

layers가 완전한 신경망을 정의하고 여러 개의 출력값을 가지며 계층이 직렬로 배열되어 있고 입력 계층과 연결되지 않은 입력이 있는 경우, 이 구문을 사용하십시오.

변환

net = dlnetwork(prunableNet) prunableNet의 컨벌루션 계층에서 가지치기를 하기 위해 선택된 필터를 제거하여 TaylorPrunableNetworkdlnetwork 객체로 변환한 다음, 학습 가능한 파라미터가 적고 크기가 더 작은 압축된 dlnetwork 객체를 반환합니다.

net = dlnetwork(mdl)은 Statistics and Machine Learning Toolbox™ 머신러닝 모델을 dlnetwork 객체로 변환합니다.

입력 인수

모두 확장

신경망 계층으로, Layer 배열로 지정됩니다.

계층은 직렬로 연결됩니다.

지원되는 계층 목록은 딥러닝 계층 목록 항목을 참조하십시오.

학습 가능한 파라미터와 상태 파라미터의 크기와 형식을 결정하기 위해 사용하는 신경망 표본 입력값 또는 데이터 레이아웃으로, 각각 다음 값 중 하나로 지정됩니다.

소프트웨어는 신경망을 통해 X1,...XN을 전파하여 dlnetwork 객체의 학습 가능한 파라미터와 상태 파라미터의 적절한 크기와 형식을 결정하고, 설정되지 않은 학습 가능한 파라미터 또는 상태 파라미터를 초기화합니다.

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

R2025a 이전: X1,...XN은 형식이 지정된 dlarray 또는 networkDataLayout 객체여야 합니다.

X1,...,XN의 순서는 layers에서 입력을 필요로 하는 계층의 순서와 일치해야 합니다.

참고

자동 초기화에서는 입력 데이터의 크기와 형식 정보만 사용합니다. 입력 데이터의 값에 따라 결정되는 초기화의 경우 학습 가능한 파라미터를 수동으로 초기화해야 합니다.

학습 가능한 파라미터와 상태 파라미터를 초기화하는 플래그로, 다음 값 중 하나로 지정됩니다.

  • 1(true) — 학습 가능한 파라미터와 상태 파라미터를 초기화합니다. 소프트웨어는 layers의 입력 계층을 사용하여 학습 가능한 파라미터와 상태 파라미터의 크기를 결정합니다.

  • 0 (false) — 학습 가능한 파라미터와 상태 파라미터를 초기화하지 않습니다. 이 옵션은 다음 경우에 사용하십시오.

    • 신경망을 추가로 편집할 계획인 경우. 예를 들어, 계층과 연결을 추가하거나 제거할 계획이 있는 경우입니다.

    • 사용자 지정 계층에서 신경망을 사용하는데 사용자 지정 초기화 함수를 사용하려는 경우.

신경망 예측과 사용자 지정 훈련 루프에는 초기화된 신경망이 필요합니다. 초기화되지 않은 신경망을 초기화하려면 initialize 함수를 사용하십시오.

1차 테일러 근사를 사용하여 가지치기할 신경망으로, TaylorPrunableNetwork 객체로 지정됩니다.

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

R2024b 이후

분류 신경망 또는 회귀 신경망으로, ClassificationNeuralNetwork (Statistics and Machine Learning Toolbox), RegressionNeuralNetwork (Statistics and Machine Learning Toolbox), CompactClassificationNeuralNetwork (Statistics and Machine Learning Toolbox) 또는 CompactRegressionNeuralNetwork (Statistics and Machine Learning Toolbox) 객체로 지정됩니다.

fitcnet (Statistics and Machine Learning Toolbox) 함수와 fitrnet (Statistics and Machine Learning Toolbox) 함수는 각각 ClassificationNeuralNetworkRegressionNeuralNetwork 객체를 반환합니다. compact (Statistics and Machine Learning Toolbox) 함수는 CompactClassificationNeuralNetworkCompactRegressionNeuralNetwork 객체를 반환합니다.

Mu 속성과 Sigma 속성이 비어 있지 않은 모델의 경우 반환되는 신경망에는 상응하는 정규화를 수행하는 입력 계층이 있습니다.

categorical형 입력값을 갖는 모델의 경우 반환되는 신경망에는 one-hot 형식으로 인코딩된 categorical형 데이터가 필요합니다.

훈련, 예측 또는 테스트 중에 신경망의 categorical형 입력값을 자동으로 one-hot 형식으로 인코딩하려면 trainingOptions, minibatchpredicttestnet 함수에서 각각 CategoricalInputEncoding 인수를 "one-hot"으로 설정하십시오. (R2025a 이후)

R2024b: onehotencode 함수를 사용하여 categorical형 입력값을 수동으로 one-hot 형식으로 인코딩하십시오.

경고

mdlResponseTransform 속성과 ScoreTransform 속성은 지원되지 않습니다. 신경망을 사용하여 예측하는 경우 출력값을 수동으로 변환해야 합니다.

StandardizeResponses 인수를 1(true)로 설정하여 피팅한 모델의 경우, 반환되는 dlnetwork 객체가 응답을 비표준화(destandardize)하지 않습니다. 신경망을 다시 훈련하는 경우 목표값을 수동으로 표준화해야 합니다. 신경망을 사용하여 예측할 때는 출력값을 수동으로 비표준화해야 합니다.

속성

모두 확장

신경망 계층으로, Layer 배열로 지정됩니다.

계층 연결로, 2개의 열이 있는 테이블로 지정됩니다.

각 테이블 행은 신경망에 있는 하나의 연결을 나타냅니다. 첫 번째 열 Source는 각 연결의 소스를 지정합니다. 두 번째 열 Destination은 각 연결의 대상을 지정합니다. 연결 소스와 대상은 계층 이름이거나 "layerName/IOName" 형태를 갖습니다. 여기서 "IOName"은 계층 입력값 또는 출력값의 이름입니다.

데이터형: table

신경망의 학습 가능한 파라미터로, 다음 3개의 열을 가진 테이블로 지정됩니다.

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

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

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

신경망의 학습 가능한 파라미터에는 신경망이 학습하는 특징(예: 컨벌루션과 완전 연결 계층의 가중치)이 포함됩니다.

학습 가능한 파라미터 값은 복소수 값일 수 있습니다 (R2024a 이후).

데이터형: table

신경망 상태로, 테이블로 지정됩니다.

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

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

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

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

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

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

훈련 또는 추론 중에 forward 함수와 predict 함수의 출력값을 사용하여 신경망 상태를 업데이트할 수 있습니다.

상태 값은 복소수 값일 수 있습니다 (R2024a 이후).

데이터형: table

신경망 입력값의 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

신경망 입력값은 입력 계층 및 계층의 미연결 입력입니다.

입력 계층 및 단일 입력을 갖는 계층의 경우 입력값 이름은 계층의 이름입니다. 여러 개의 입력을 갖는 계층의 경우, 입력 이름은 "layerName/inputName"입니다. 여기서 layerName은 계층의 이름이고 inputName은 계층 입력의 이름입니다.

여러 개의 입력값을 갖는 신경망의 경우, 훈련 함수와 예측 함수는 이 속성을 사용하여 입력값의 순서를 결정합니다. 예를 들어, predict 함수에 대한 메모리 내 입력값 X1,...,XM의 입력값 순서는 신경망의 InputNames 속성에 있는 대응하는 입력값의 순서와 일치해야 합니다.

순서를 사용자 지정하려면 InputNames를 원하는 순서로 설정하십시오. (R2024b 이후)

R2024b 이전: 이 속성은 읽기 전용입니다. predict 함수 및 이와 유사한 함수 호출에서 InputNames로 지정된 순서와 일치하는 입력 인수를 갖도록 코드를 조정하십시오.

참고

InputNames 속성을 사용자 지정한 후 계층을 추가하거나 제거하는 등 신경망을 편집해도 InputNames 속성은 변경되지 않습니다. 즉, 신경망 입력값에 해당하는 계층을 추가하거나 제거할 경우 InputNames 속성도 수동으로 업데이트해야 합니다.

데이터형: cell

신경망 출력값의 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

단일 출력값을 갖는 계층의 경우 출력값 이름은 계층의 이름입니다. 여러 개의 출력을 갖는 계층의 경우, 출력 이름은 "layerName/outputName"입니다. 여기서 layerName은 계층의 이름이고 outputName은 계층 출력의 이름입니다.

출력 이름을 지정하지 않으면, 신경망을 만들 때 OutputNames 속성이 미연결 출력이 있는 계층으로 설정됩니다.

여러 개의 출력값을 갖는 신경망의 경우, 훈련 함수와 예측 함수는 이 속성을 사용하여 출력값의 순서를 결정합니다. 예를 들어, predict 함수의 출력값 Y1,...,YN은 신경망의 OutputNames 속성으로 지정된 출력값에 대응합니다.

참고

OutputNames 속성을 사용자 지정한 후 계층을 추가하거나 제거하는 등 신경망을 편집해도 OutputNames 속성은 변경되지 않습니다. 즉, 신경망 출력값에 대응하는 계층을 추가하거나 제거할 경우 OutputNames 속성도 수동으로 업데이트해야 합니다.

데이터형: cell

읽기 전용 속성입니다.

초기화된 신경망에 대한 플래그로, 다음 값 중 하나로 지정됩니다.

  • 1(true) — 신경망이 초기화되었으며 예측 및 사용자 지정 훈련 루프를 위한 준비가 되었습니다. 학습 가능한 파라미터 또는 상태 파라미터의 을 변경할 경우 신경망은 초기화된 상태로 유지됩니다.

  • 0(false) — 신경망이 초기화되지 않았으며 예측 또는 사용자 지정 훈련 루프를 위한 준비가 되지 않았습니다. 초기화되지 않은 신경망을 초기화하려면 initialize 함수를 사용하십시오.

데이터형: logical

객체 함수

addInputLayerAdd input layer to network
addLayers신경망에 계층 추가하기
removeLayers신경망에서 계층 제거
connectLayers신경망에서 계층 연결하기
disconnectLayers신경망에서 계층 연결 끊기
replaceLayerReplace layer in neural network
getLayerLook up a layer by name or path
expandLayersExpand network layers
groupLayersGroup layers into network layers
summary신경망 요약 출력
plot신경망 아키텍처 플로팅
initializeInitialize learnable and state parameters of neural network
predictCompute deep learning network output for inference
forwardCompute deep learning network output for training
resetState신경망의 상태 파라미터 재설정
setL2Factor계층의 학습 가능한 파라미터의 L2 정규화 인자 설정
setLearnRateFactor계층의 학습 가능한 파라미터에 대한 학습률 인자 설정
getLearnRateFactor계층의 학습 가능한 파라미터에 대한 학습률 인자 가져오기
getL2Factor계층의 학습 가능한 파라미터의 L2 정규화 인자 가져오기

예제

모두 축소

2차원 영상이 입력값으로 주어졌을 때 categorical형 레이블과 숫자형 값을 둘 다 예측하는, 2개 출력값을 갖는 신경망을 정의합니다.

클래스와 응답 변수의 개수를 지정합니다.

numClasses = 10;
numResponses = 1;

빈 신경망을 만듭니다.

net = dlnetwork;

신경망의 기본 분기의 계층과 소프트맥스 출력값을 정의합니다.

layers = [
    imageInputLayer([28 28 1],Normalization="none")

    convolution2dLayer(5,16,Padding="same")
    batchNormalizationLayer
    reluLayer(Name="relu_1")

    convolution2dLayer(3,32,Padding="same",Stride=2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer

    additionLayer(2,Name="add")

    fullyConnectedLayer(numClasses)
    softmaxLayer(Name="softmax")];

net = addLayers(net,layers);

건너뛰기 연결을 추가합니다.

layers = [
    convolution2dLayer(1,32,Stride=2,Name="conv_skip")
    batchNormalizationLayer
    reluLayer(Name="relu_skip")];

net = addLayers(net,layers);
net = connectLayers(net,"relu_1","conv_skip");
net = connectLayers(net,"relu_skip","add/in2");

회귀 출력값을 위해 완전 연결 계층을 추가합니다.

layers = fullyConnectedLayer(numResponses,Name="fc_2");
net = addLayers(net,layers);
net = connectLayers(net,"add","fc_2");

신경망을 플롯으로 표시합니다.

figure
plot(net)

Figure contains an axes object. The axes object contains an object of type graphplot.

완전한 단일 입력 신경망을 정의하고 계층이 직렬로 배열되어 있으며 입력 계층이 있는 계층의 경우 계층 배열을 dlnetwork 객체로 직접 변환할 수 있습니다.

LSTM 신경망을 계층 배열로 지정합니다.

layers = [
    sequenceInputLayer(12)
    lstmLayer(100)
    fullyConnectedLayer(9)
    softmaxLayer];

계층 배열을 dlnetwork 객체로 변환합니다. 계층 배열에 입력 계층이 있고 다른 입력값은 없으므로 신경망이 초기화됩니다.

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

         Layers: [4×1 nnet.cnn.layer.Layer]
    Connections: [3×2 table]
     Learnables: [5×3 table]
          State: [2×3 table]
     InputNames: {'sequenceinput'}
    OutputNames: {'softmax'}
    Initialized: 1

  View summary with summary.

사전 훈련된 신경망을 불러옵니다.

net = imagePretrainedNetwork;

dlnetwork 객체의 Learnables 속성은 신경망의 학습 가능한 파라미터를 포함하는 테이블입니다. 테이블은 중첩 계층의 파라미터를 개별 행에 포함합니다. learnables 테이블의 처음 몇 개 행을 봅니다.

learnables = net.Learnables;
head(learnables)
          Layer           Parameter           Value       
    __________________    _________    ___________________

    "conv1"               "Weights"    {3×3×3×64  dlarray}
    "conv1"               "Bias"       {1×1×64    dlarray}
    "fire2-squeeze1x1"    "Weights"    {1×1×64×16 dlarray}
    "fire2-squeeze1x1"    "Bias"       {1×1×16    dlarray}
    "fire2-expand1x1"     "Weights"    {1×1×16×64 dlarray}
    "fire2-expand1x1"     "Bias"       {1×1×64    dlarray}
    "fire2-expand3x3"     "Weights"    {3×3×16×64 dlarray}
    "fire2-expand3x3"     "Bias"       {1×1×64    dlarray}

신경망의 학습 가능한 파라미터를 고정하려면 학습 가능한 파라미터를 루프를 사용해 순환하고 setLearnRateFactor 함수를 사용하여 학습률을 0으로 설정합니다.

factor = 0;

numLearnables = size(learnables,1);
for i = 1:numLearnables
    layerName = learnables.Layer(i);
    parameterName = learnables.Parameter(i);
    
    net = setLearnRateFactor(net,layerName,parameterName,factor);
end

훈련 시 업데이트된 학습률 인자를 사용하려면 사용자 지정 훈련 루프에서 dlnetwork 객체를 업데이트 함수에 전달해야 합니다. 예를 들어, 다음 명령을 사용합니다.

[net,velocity] = sgdmupdate(net,gradients,velocity);

확장 기능

모두 확장

버전 내역

R2019b에 개발됨

모두 확장