setLearnRateFactor
層の学習可能なパラメーターの学習率係数を設定します。
構文
説明
は、layerUpdated
= setLearnRateFactor(layer
,parameterName
,factor
)layer
の parameterName
という名前のパラメーターの学習率係数を factor
に設定します。
組み込み層の場合、対応するプロパティを使用して学習率係数を直接設定できます。たとえば、convolution2dLayer
層の場合、構文 layer = setLearnRateFactor(layer,'Weights',factor)
は layer.WeightLearnRateFactor = factor
と等価です。
は、パス layerUpdated
= setLearnRateFactor(layer
,parameterPath
,factor
)parameterPath
で指定されたパラメーターの学習率係数を設定します。この構文は、層が networkLayer
のとき、またはパラメーターがカスタム層の dlnetwork
オブジェクトにあるときに使用します。
は、指定された netUpdated
= setLearnRateFactor(net
,layerName
,parameterName
,factor
)dlnetwork
オブジェクトの layerName
という名前の層の parameterName
という名前のパラメーターの学習率係数を設定します。
は、パス netUpdated
= setLearnRateFactor(net
,parameterPath
,factor
)parameterPath
で指定されたパラメーターの学習率係数を設定します。この構文は、パラメーターが networkLayer
にあるとき、またはパラメーターがカスタム層の dlnetwork
オブジェクトにあるときに使用します。
例
学習可能なパラメーターの学習率係数の設定および取得
カスタム SReLU 層の学習可能なパラメーターの学習率係数を設定および取得します。
この例にサポート ファイルとして添付されているカスタム層 sreluLayer
を含む層配列を作成します。この層にアクセスするには、この例をライブ スクリプトとして開きます。
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
batchNormalizationLayer
sreluLayer
fullyConnectedLayer(10)
softmaxLayer];
sreluLayer
の学習可能なパラメーター LeftThreshold
の学習率係数を 2 に設定します。
layers(4) = setLearnRateFactor(layers(4),"LeftThreshold",2);
更新された学習率係数を表示します。
factor = getLearnRateFactor(layers(4),"LeftThreshold")
factor = 2
カスタム入れ子層の学習可能なパラメーターの学習率係数の設定および取得
ネットワーク構成を使用して定義された入れ子層の学習可能なパラメーターの学習率係数を設定して取得します。
この例にサポート ファイルとして添付されているカスタム層 residualBlockLayer
を使用して、残差ブロック層を作成します。このファイルにアクセスするには、この例をライブ スクリプトとして開きます。
numFilters = 64; layer = residualBlockLayer(numFilters)
layer = residualBlockLayer with properties: Name: '' Learnable Parameters Network: [1x1 dlnetwork] State Parameters Network: [1x1 dlnetwork] Use properties method to see a list of all properties.
入れ子ネットワークの層を表示します。
layer.Network.Layers
ans = 7x1 Layer array with layers: 1 'conv_1' 2-D Convolution 64 3x3 convolutions with stride [1 1] and padding 'same' 2 'batchnorm_1' Batch Normalization Batch normalization 3 'relu_1' ReLU ReLU 4 'conv_2' 2-D Convolution 64 3x3 convolutions with stride [1 1] and padding 'same' 5 'batchnorm_2' Batch Normalization Batch normalization 6 'add' Addition Element-wise addition of 2 inputs 7 'relu_2' ReLU ReLU
関数 setLearnRateFactor
を使用して、層 'conv_1'
の学習可能なパラメーター 'Weights'
の学習率係数を 2 に設定します。
factor = 2;
layer = setLearnRateFactor(layer,'Network/conv_1/Weights',factor);
関数 getLearnRateFactor
を使用して、更新された学習率係数を取得します。
factor = getLearnRateFactor(layer,'Network/conv_1/Weights')
factor = 2
dlnetwork
の学習可能なパラメーターの学習率係数の設定および取得
dlnetwork
オブジェクトの学習可能なパラメーターの学習率係数を設定して取得します。
dlnetwork
オブジェクトを作成します。
net = 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")]; net = addLayers(net,layers);
関数 setLearnRateFactor
を使用して、畳み込み層の 'Weights'
学習可能パラメーターの学習率係数を 2 に設定します。
factor = 2;
net = setLearnRateFactor(net,'conv',Weights=factor);
関数 getLearnRateFactor
を使用して、更新された学習率係数を取得します。
factor = getLearnRateFactor(net,'conv',"Weights")
factor = 2
入れ子層の学習可能なパラメーターの学習率係数の設定および取得
100 個の隠れユニットをもつ lstmLayer
、およびドロップアウトの確率が 0.2 である dropoutLayer
を含む層の配列を作成します。
layers = [lstmLayer(100,OutputMode="sequence",Name="lstm") dropoutLayer(0.2,Name="dropout")];
これらの層を含むネットワーク層を作成します。
lstmDropoutLayer = networkLayer(layers,Name="lstmDropout");
このネットワーク層を使用してネットワークを構築します。
layers = [sequenceInputLayer(3) lstmDropoutLayer lstmDropoutLayer fullyConnectedLayer(10) softmaxLayer];
dlnetwork
オブジェクトを作成します。関数trainnet
を使用してネットワークの学習を行い、dlnetwork
オブジェクトを作成することもできます。
net = dlnetwork(layers);
関数 setLearnRateFactor
を使用して、最初のネットワーク層にある LSTM 層の学習可能なパラメーター InputWeights
の学習率係数を 2 に設定します。
factor = 2;
net = setLearnRateFactor(net,"lstmDropout_1/lstm/InputWeights",factor);
関数 getLearnRateFactor
を使用して、更新された学習率係数を取得します。
factor = getLearnRateFactor(net,"lstmDropout_1/lstm/InputWeights")
factor = 2
カスタム入れ子 dlnetwork
の学習可能なパラメーターの学習率係数の設定および取得
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(numFilters,'Name','res1') residualBlockLayer(numFilters,'Name','res2') residualBlockLayer(2*numFilters,'Stride',2,'IncludeSkipConvolution',true,'Name','res3') residualBlockLayer(2*numFilters,'Name','res4') residualBlockLayer(4*numFilters,'Stride',2,'IncludeSkipConvolution',true,'Name','res5') residualBlockLayer(4*numFilters,'Name','res6') globalAveragePooling2dLayer('Name','gap') fullyConnectedLayer(numClasses,'Name','fc') softmaxLayer('Name','sm')]; dlnet = dlnetwork(layers);
層 'res1'
の入れ子ネットワークの層を表示します。
dlnet.Layers(6).Network.Layers
ans = 7x1 Layer array with layers: 1 'conv_1' 2-D Convolution 32 3x3x32 convolutions with stride [1 1] and padding 'same' 2 'batchnorm_1' Batch Normalization Batch normalization with 32 channels 3 'relu_1' ReLU ReLU 4 'conv_2' 2-D Convolution 32 3x3x32 convolutions with stride [1 1] and padding 'same' 5 'batchnorm_2' Batch Normalization Batch normalization with 32 channels 6 'add' Addition Element-wise addition of 2 inputs 7 'relu_2' ReLU ReLU
関数 setLearnRateFactor
を使用して、層 'conv_1'
の学習可能なパラメーター 'Weights'
の学習率係数を 2 に設定します。
factor = 2;
dlnet = setLearnRateFactor(dlnet,'res1/Network/conv_1/Weights',factor);
関数 getLearnRateFactor
を使用して、更新された学習率係数を取得します。
factor = getLearnRateFactor(dlnet,'res1/Network/conv_1/Weights')
factor = 2
学習可能なパラメーターの凍結
事前学習済みのネットワークを読み込みます。
net = imagePretrainedNetwork;
dlnetwork
オブジェクトの Learnables
プロパティは、ネットワークの学習可能なパラメーターが格納された table です。この table には、入れ子層のパラメーターが別々の行に含まれています。このテーブル learnables の最初の数行を表示します。
learnables = net.Learnables; head(learnables)
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); net = setLearnRateFactor(net,layerName,parameterName,factor); end
更新された学習率係数を学習時に使用するには、カスタム学習ループの更新関数に dlnetwork オブジェクトを渡さなければなりません。たとえば、次のコマンドを使用します。
[net,velocity] = sgdmupdate(net,gradients,velocity);
入力引数
layer
— 入力層
スカラー Layer
オブジェクト
入力層。スカラー Layer
オブジェクトとして指定します。
parameterName
— パラメーター名
文字ベクトル | string スカラー
パラメーター名。文字ベクトルまたは string スカラーとして指定します。
factor
— 学習率係数
非負のスカラー
パラメーターの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、指定されたパラメーターの学習率が決定されます。たとえば、factor
が 2 の場合、指定されたパラメーターの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
例: 2
parameterPath
— 入れ子層のパラメーターへのパス
string スカラー | 文字ベクトル
入れ子層のパラメーターへのパス。string スカラーまたは文字ベクトルとして指定します。networkLayer
内の層、またはそれ自体でニューラル ネットワークを学習可能なパラメーターとして定義するカスタム層を入れ子層として指定できます。
setLearnRateFactor
への入力が層である場合、次のようになります。
入れ子層がネットワーク層の中にある場合、パラメーターのパスの形式は
"nestedLayerName/parameterName"
となります。ここで、nestedlayerName
はネットワーク層の中にある入れ子層の名前、parameterName
はパラメーターの名前です。入れ子層のレベルが複数ある場合は、nestedLayerName1/.../nestedLayerNameN/parameterName
の形式でパスを指定します。入れ子層が、それ自体でニューラル ネットワークを学習可能なパラメーターとして定義するカスタム層である場合、パラメーターのパスの形式は
"propertyName/layerName/parameterName"
となります。ここで、propertyName
はdlnetwork
オブジェクトが格納されたプロパティの名前、layerName
はdlnetwork
オブジェクト内の層の名前、parameterName
はパラメーターの名前です。入れ子層のレベルが複数ある場合は、"propertyName1/layerName1/.../propertyNameN/layerNameN/parameterName"
の形式でパスを指定します。
setLearnRateFactor
への入力が dlnetwork
オブジェクトで、目的のパラメーターが入れ子層の中にある場合、次のようになります。
入れ子層がネットワーク層の中にある場合、パラメーターのパスの形式は
"networkLayerName/nestedLayerName/parameterName"
となります。ここで、networkLayerName
はネットワーク層の名前、nestedlayerName
はネットワーク層の中にある入れ子層の名前、parameterName
はパラメーターの名前です。入れ子層のレベルが複数ある場合は、"networkLayerName1/.../networkLayerNameN/nestedLayerName/parameterName"
の形式でパスを指定します。入れ子層が、それ自体でニューラル ネットワークを学習可能パラメーターとして定義するカスタム層である場合、パラメーターのパスの形式は
"customLayerName1/propertyName/layerName/parameterName"
となります。ここで、layerName1
は入力のdlnetwork
オブジェクト内の層の名前、propertyName
はdlnetwork
オブジェクトが格納された層のプロパティの名前、layerName
はdlnetwork
オブジェクト内の層の名前、parameterName
はパラメーターの名前です。入れ子層のレベルが複数ある場合は、"customLayerName1/propertyName1/.../customLayerNameN/propertyNameN/layerName/parameterName"
の形式でパスを指定します。
データ型: char
| string
net
— ニューラル ネットワーク
dlnetwork
オブジェクト
ニューラル ネットワーク。dlnetwork
オブジェクトとして指定します。
layerName
— 層の名前
string スカラー | 文字ベクトル
層の名前。string スカラーまたは文字ベクトルとして指定します。
データ型: char
| string
出力引数
バージョン履歴
R2017b で導入R2024a: ネットワーク層内にあるパラメーターへのパスの指定
引数 parameterPath
を使用して、networkLayer
内にあるパラメーターへのパスを指定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)