Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

setLearnRateFactor

계층의 학습 가능한 파라미터에 대한 학습률 인자 설정

설명

예제

layerUpdated = setLearnRateFactor(layer,parameterName,factor)layer에서 이름이 parameterName인 파라미터에 대한 학습률 인자를 factor로 설정합니다.

내장 계층의 경우, 상응하는 속성을 사용하여 학습률 인자를 직접 설정할 수 있습니다. 예를 들어, convolution2dLayer 계층의 경우, 구문 layer = setLearnRateFactor(layer,'Weights',factor)layer.WeightLearnRateFactor = factor와 동일합니다.

예제

layerUpdated = setLearnRateFactor(layer,parameterPath,factor)는 경로 parameterPath로 지정된 파라미터에 대한 학습률 인자를 설정합니다. 파라미터가 사용자 지정 계층의 dlnetwork 객체에 있는 경우 이 구문을 사용하십시오.

예제

dlnetUpdated = setLearnRateFactor(dlnet,layerName,parameterName,factor)는 지정된 dlnetwork 객체에 대해 이름이 layerName인 계층에서 이름이 parameterName인 파라미터에 대한 학습률 인자를 설정합니다.

예제

dlnetUpdated = setLearnRateFactor(dlnet,parameterPath,factor)는 경로 parameterPath로 지정된 파라미터에 대한 학습률 인자를 설정합니다. 파라미터가 중첩 계층에 있는 경우 이 구문을 사용하십시오.

예제

모두 축소

사용자 지정 PReLU 계층의 학습 가능한 파라미터에 대한 학습률 인자를 설정하고 가져옵니다.

사용자 지정 PReLU 계층을 정의합니다. 이 계층을 만들려면 파일 preluLayer.m을 현재 폴더에 저장하십시오.

사용자 지정 계층 preluLayer를 넣어 계층 배열을 만듭니다.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    batchNormalizationLayer
    preluLayer(20,'prelu')
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

preluLayer의 학습 가능한 파라미터 'Alpha'에 대한 학습률 인자를 2로 설정합니다.

layers(4) = setLearnRateFactor(layers(4),'Alpha',2);

업데이트된 학습률 인자를 표시합니다.

factor = getLearnRateFactor(layers(4),'Alpha')
factor = 2

중첩 계층의 학습 가능한 파라미터에 대한 학습률 인자를 설정하고 가져옵니다.

이 예제에 지원 파일로 첨부되어 있는 사용자 지정 계층 residualBlockLayer를 사용하여 잔차 블록 계층을 만듭니다. 이 파일에 액세스하려면 이 예제를 라이브 스크립트로 여십시오.

inputSize = [224 224 64];
numFilters = 64;
layer = residualBlockLayer(inputSize,numFilters)
layer = 
  residualBlockLayer with properties:

       Name: ''

   Learnable Parameters
    Network: [1x1 dlnetwork]

  Show all properties

중첩 신경망의 계층을 봅니다.

layer.Network.Layers
ans = 
  8x1 Layer array with layers:

     1   'in'      Image Input           224x224x64 images
     2   'conv1'   Convolution           64 3x3x64 convolutions with stride [1  1] and padding 'same'
     3   'gn1'     Group Normalization   Group normalization with 64 channels split into 1 groups
     4   'relu1'   ReLU                  ReLU
     5   'conv2'   Convolution           64 3x3x64 convolutions with stride [1  1] and padding 'same'
     6   'gn2'     Group Normalization   Group normalization with 64 channels split into 64 groups
     7   'add'     Addition              Element-wise addition of 2 inputs
     8   'relu2'   ReLU                  ReLU

setLearnRateFactor 함수를 사용하여, 계층 'conv1'의 학습 가능한 파라미터 'Weights'에 대한 학습률 인자를 2로 설정합니다.

factor = 2;
layer = setLearnRateFactor(layer,'Network/conv1/Weights',factor);

getLearnRateFactor 함수를 사용하여, 업데이트된 학습률 인자를 가져옵니다.

factor = getLearnRateFactor(layer,'Network/conv1/Weights')
factor = 2

dlnetwork 객체의 학습 가능한 파라미터에 대한 학습률 인자를 설정하고 가져옵니다.

dlnetwork 객체를 만듭니다.

layers = [
    imageInputLayer([28 28 1],'Normalization','none','Name','in')
    convolution2dLayer(5,20,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','sm')];

lgraph = layerGraph(layers);

dlnet = dlnetwork(lgraph);

setLearnRateFactor 함수를 사용하여, 컨벌루션 계층의 학습 가능한 파라미터 'Weights'에 대한 학습률 인자를 2로 설정합니다.

factor = 2;
dlnet = setLearnRateFactor(dlnet,'conv','Weights',factor);

getLearnRateFactor 함수를 사용하여, 업데이트된 학습률 인자를 가져옵니다.

factor = getLearnRateFactor(dlnet,'conv','Weights')
factor = 2

dlnetwork 객체에 있는 중첩 계층의 학습 가능한 파라미터에 대한 학습률 인자를 설정하고 가져옵니다.

이 예제에 지원 파일로 첨부되어 있는 사용자 지정 계층 residualBlockLayer를 포함하는 dlnetwork 객체를 만듭니다. 이 파일에 액세스하려면 이 예제를 라이브 스크립트로 여십시오.

inputSize = [224 224 3];
numFilters = 32;
numClasses = 5;

layers = [
    imageInputLayer(inputSize,'Normalization','none','Name','in')
    convolution2dLayer(7,numFilters,'Stride',2,'Padding','same','Name','conv')
    groupNormalizationLayer('all-channels','Name','gn')
    reluLayer('Name','relu')
    maxPooling2dLayer(3,'Stride',2,'Name','max')
    residualBlockLayer([56 56 numFilters],numFilters,'Name','res1')
    residualBlockLayer([56 56 numFilters],numFilters,'Name','res2')
    residualBlockLayer([56 56 numFilters],2*numFilters,'Stride',2,'IncludeSkipConvolution',true,'Name','res3')
    residualBlockLayer([28 28 2*numFilters],2*numFilters,'Name','res4')
    residualBlockLayer([28 28 2*numFilters],4*numFilters,'Stride',2,'IncludeSkipConvolution',true,'Name','res5')
    residualBlockLayer([14 14 4*numFilters],4*numFilters,'Name','res6')
    globalAveragePooling2dLayer('Name','gap')
    fullyConnectedLayer(numClasses,'Name','fc')
    softmaxLayer('Name','sm')];

lgraph = layerGraph(layers);
dlnet = dlnetwork(lgraph);

계층 'res1'에 있는 중첩 신경망의 계층을 봅니다.

dlnet.Layers(6).Network.Layers
ans = 
  8x1 Layer array with layers:

     1   'in'      Image Input           56x56x32 images
     2   'conv1'   Convolution           32 3x3x32 convolutions with stride [1  1] and padding 'same'
     3   'gn1'     Group Normalization   Group normalization with 32 channels split into 1 groups
     4   'relu1'   ReLU                  ReLU
     5   'conv2'   Convolution           32 3x3x32 convolutions with stride [1  1] and padding 'same'
     6   'gn2'     Group Normalization   Group normalization with 32 channels split into 32 groups
     7   'add'     Addition              Element-wise addition of 2 inputs
     8   'relu2'   ReLU                  ReLU

setLearnRateFactor 함수를 사용하여, 계층 'conv1'의 학습 가능한 파라미터 'Weights'에 대한 학습률 인자를 2로 설정합니다.

factor = 2;
dlnet = setLearnRateFactor(dlnet,'res1/Network/conv1/Weights',factor);

getLearnRateFactor 함수를 사용하여, 업데이트된 학습률 인자를 가져옵니다.

factor = getLearnRateFactor(dlnet,'res1/Network/conv1/Weights')
factor = 2

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

net = squeezenet;

신경망을 계층 그래프로 변환하고, 출력 계층을 제거하고, 이를 dlnetwork 객체로 변환합니다.

lgraph = layerGraph(net);
lgraph = removeLayers(lgraph,'ClassificationLayer_predictions');
dlnet = dlnetwork(lgraph);

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

learnables = dlnet.Learnables;
head(learnables)
ans=8×3 table
          Layer           Parameter           Value       
    __________________    _________    ___________________

    "conv1"               "Weights"    {3x3x3x64  dlarray}
    "conv1"               "Bias"       {1x1x64    dlarray}
    "fire2-squeeze1x1"    "Weights"    {1x1x64x16 dlarray}
    "fire2-squeeze1x1"    "Bias"       {1x1x16    dlarray}
    "fire2-expand1x1"     "Weights"    {1x1x16x64 dlarray}
    "fire2-expand1x1"     "Bias"       {1x1x64    dlarray}
    "fire2-expand3x3"     "Weights"    {3x3x16x64 dlarray}
    "fire2-expand3x3"     "Bias"       {1x1x64    dlarray}

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

factor = 0;

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

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

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

입력 인수

모두 축소

입력 계층으로, 스칼라 Layer 객체로 지정됩니다.

파라미터 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

파라미터에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 지정된 파라미터에 대한 학습률이 결정됩니다. 예를 들어, factor가 2인 경우, 지정된 파라미터에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

예: 2

중첩 계층의 파라미터 경로로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 중첩 계층은 그 자체가 계층 그래프를 학습 가능한 파라미터로 정의하는 사용자 지정 계층입니다.

setLearnRateFactor에 대한 입력값이 중첩 계층인 경우 파라미터 경로는 "propertyName/layerName/parameterName" 형식을 갖습니다. 여기서,

  • propertyNamedlnetwork 객체를 포함하는 속성의 이름입니다.

  • layerNamedlnetwork 객체에 있는 계층의 이름입니다.

  • parameterName은 파라미터의 이름입니다.

중첩 계층의 수준이 여러 개인 경우, "propertyName1/layerName1/.../propertyNameN/layerNameN/parameterName" 형식을 사용하여 각 수준을 지정하십시오. 여기서 propertyName1layerName1setLearnRateFactor 함수에 대한 입력값의 계층에 대응되고, 그 이후 부분은 더 깊은 수준에 대응됩니다.

예: setLearnRateFactor에 대한 계층 입력값의 경우, 경로 "Network/conv1/Weights"layer.Network로 지정된 dlnetwork 객체에서 이름이 "conv1"인 계층의 "Weights" 파라미터를 지정합니다.

setLearnRateFactor에 대한 입력값이 dlnetwork 객체이고 원하는 파라미터가 중첩 계층에 있는 경우, 파라미터 경로는 "layerName1/propertyName/layerName/parameterName" 형식을 갖습니다. 여기서,

  • layerName1은 입력값 dlnetwork 객체에 있는 계층의 이름입니다.

  • propertyNamedlnetwork 객체를 포함하는 계층의 속성입니다.

  • layerNamedlnetwork 객체에 있는 계층의 이름입니다.

  • parameterName은 파라미터의 이름입니다.

중첩 계층의 수준이 여러 개인 경우, "layerName1/propertyName1/.../layerNameN/propertyNameN/layerName/parameterName" 형식을 사용하여 각 수준을 지정하십시오. 여기서 layerName1propertyName1setLearnRateFactor 함수에 대한 입력값의 계층에 대응되고, 그 이후 부분은 더 깊은 수준에 대응됩니다.

예: setLearnRateFactor에 대한 dlnetwork 입력값의 경우, 경로 "res1/Network/conv1/Weights"layer.Network로 지정된 dlnetwork 객체에서 이름이 "conv1"인 계층의 "Weights" 파라미터를 지정합니다. 여기서 layer는 입력 신경망 dlnet에서 이름이 "res1"인 계층입니다.

데이터형: char | string

사용자 지정 훈련 루프에 대한 신경망으로, dlnetwork 객체로 지정됩니다.

계층 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다.

데이터형: char | string

출력 인수

모두 축소

업데이트된 계층으로, Layer로 반환됩니다.

업데이트된 신경망으로, dlnetwork로 반환됩니다.

R2017b에 개발됨