replaceLayer
ニューラル ネットワークの層の置き換え
構文
説明
は、netUpdated
= replaceLayer(net
,layerName
,layers
)dlnetwork
オブジェクト net
の層 layerName
を layers
の層に置き換えます。
replaceLayer
は、layers
の層を順に結合し、layers
をネットワークに結合します。
は、netUpdated
= replaceLayer(net
,layerPath
,layers
)dlnetwork
オブジェクト net
内にある、layerPath
によって指定された層を、layers
の層に置き換えます。 (R2024a 以降)
は、さらに、層を再結合する方法を指定します。netUpdated
= replaceLayer(___,ReconnectBy=mode
)
例
ニューラル ネットワークの層の置き換え
シンプルなネットワーク アーキテクチャを定義し、そのネットワークをプロットに表示します。
net = dlnetwork; layers = [ imageInputLayer([28 28 1],Name="input") convolution2dLayer(3,16,Padding="same") reluLayer(Name="relu1") additionLayer(2,Name="add") fullyConnectedLayer(10) softmaxLayer]; net = addLayers(net,layers); net = connectLayers(net,"input","add/in2"); figure plot(net)
ネットワークの ReLU 層を、バッチ正規化層およびそれに続く leaky ReLU 層に置き換えます。
layers = [
batchNormalizationLayer
leakyReluLayer(0.1)];
net = replaceLayer(net,"relu1",layers);
更新されたネットワークをプロットします。
figure plot(net)
入れ子ネットワークの層の置き換え
複数のネットワーク層を含むネットワーク アーキテクチャを定義します。
net = dlnetwork;
layers = [lstmLayer(100,OutputMode="sequence")
dropoutLayer(0.2)];
lstmDropoutLayer = networkLayer(layers);
layers = [sequenceInputLayer(3)
lstmDropoutLayer
lstmDropoutLayer
fullyConnectedLayer(10)
softmaxLayer];
net = addLayers(net,layers);
ネットワークをプロットします。
figure plot(net)
層へのパスを指定して最初の LSTM 層を参照します。このパスには、ネットワーク層の名前 ("subnet_1"
) および LSTM 層の名前 ("lstm"
) をスラッシュで区切って含めます。このパスを使用することで、複数のネットワーク層から成る階層内で入れ子になった層を参照することができます。
tempLSTMLayer = getLayer(net,"subnet_1/lstm");
層のプロパティを編集し、元の層を変更後の層に置き換えます。
tempLSTMLayer.InputWeightsInitializer = "zeros"; tempLSTMLayer.RecurrentWeightsInitializer = "zeros"; tempLSTMLayer.BiasInitializer = "ones"; tempLSTMLayer.Name = "modifiedLSTM";
ネットワーク、置き換える層へのパス、および変更後の層を指定して、元の層を変更後の層に置き換えます。
net = replaceLayer(net,"subnet_1/lstm",tempLSTMLayer);
入力引数
net
— ニューラル ネットワーク
dlnetwork
オブジェクト
ニューラル ネットワーク。dlnetwork
オブジェクトとして指定します。
layerName
— 置き換える層の名前
string スカラー | 文字ベクトル
置き換える層の名前。string スカラーまたは文字ベクトルとして指定します。
layers
— ネットワーク層
Layer
配列
ネットワーク層。Layer
配列として指定します。
組み込み層の一覧については、深層学習層の一覧を参照してください。
layerPath
— 入れ子層へのパス
文字ベクトル | string スカラー
入れ子層へのパス。文字ベクトルまたは string スカラーとして指定します。
networkLayer
内の層については、layerPath
を次のように指定します。
ネットワーク層の名前と入れ子層の名前は、スラッシュ
"/"
で区切ります。たとえば、"networkLayerName"
という名前のネットワーク層にある"nestedLayerName"
という名前の層へのパスは、"networkLayerName/nestedLayerName"
となります。入れ子層のレベルが複数ある場合は、networkLayerName1/.../networkLayerNameN/nestedLayerName
の形式でパスを指定します。
カスタム層は、dlnetwork
を学習可能なプロパティまたは状態プロパティとしてもつことができます。カスタム層のプロパティに含まれる dlnetwork
の層については、layerPath
を次のように指定します。
カスタム層の名前、
dlnetwork
プロパティの名前、および入れ子層の名前は、スラッシュ"/"
で区切ります。たとえば、"customLayerName"
という名前のカスタム層の"propertyName"
という名前のdlnetwork
プロパティ内にある"layerName"
という名前の層へのパスは、"customLayerName/propertyName/layerName"
となります。入れ子層のレベルが複数ある場合は、"customLayerName1/propertyName1/.../customLayerNameN/propertyNameN/layerName"
の形式でパスを指定します。
データ型: char
| string
mode
— 層を再結合する方法
"name"
(既定値) | "order"
層を再結合する方法。次のいずれかとして指定します。
"name"
– 置き換えられた層の入力名と出力名を使用して、layers
を再結合します。置き換えられた層の入力に結合された各層について、layers(1)
と同じ入力名をもつ入力に層を再結合します。置き換えられた層の出力に結合された各層について、layers(end)
と同じ出力名をもつ出力に層を再結合します。"order"
–layers(1)
の入力名とlayers(end)
の出力名の順序を使用して、layers
を再結合します。置き換えられた層のi
番目の入力に結合されている層を、layers(1)
のi
番目の入力に再結合します。置き換えられた層のj
番目の出力に結合されている層を、layers(end)
のj
番目の出力に再結合します。
出力引数
netUpdated
— 更新されたネットワーク
dlnetwork
オブジェクト
更新されたネットワーク。未初期化の dlnetwork
オブジェクトとして返されます。
dlnetwork
オブジェクトの学習可能なパラメーターを初期化するには、関数 initialize
を使用します。
関数 replaceLayer
は量子化情報を保持しません。入力ネットワークが量子化されたネットワークであった場合でも、出力ネットワークに量子化情報は含まれません。
バージョン履歴
R2018b で導入R2024a: 入れ子層の置き換え
R2024a 以降、入れ子層へのパスを指定することで、networkLayer
内またはカスタム層のプロパティ内で入れ子になっている層を置き換えることができるようになりました。入れ子層を置き換えるには、新たに追加された layerPath
入力を使用します。
R2024a: LayerGraph
オブジェクトは非推奨
R2024a 以降、LayerGraph
オブジェクトは非推奨となりました。代わりに、dlnetwork
オブジェクトを使用してください。この推奨により、LayerGraph
を入力する次の構文も非推奨となります。
lgraphUpdated = replaceLayer(lgraph,layerName,layers)
lgraphUpdated = replaceLayer(lgraph,layerName,layers,ReconnectBy=mode)
LayerGraph
オブジェクトをサポートするほとんどの関数は、dlnetwork
オブジェクトもサポートします。LayerGraph
オブジェクトの代表的な使用法と、代わりにオブジェクト関数 dlnetwork
を使用するためのコードの更新方法を、次の表に示します。
非推奨 | 推奨 |
---|---|
lgraph = layerGraph; | net = dlnetwork; |
lgraph = layerGraph(layers); | net = dlnetwork(layers,Initialize=false); |
lgraph = layerGraph(net); | net = dag2dlnetwork(net); |
lgraph = addLayers(lgraph,layers); | net = addLayers(net,layers); |
lgraph = removeLayers(lgraph,layerNames); | net = removeLayers(net,layerNames); |
lgraph = replaceLayer(lgraph,layerName,layers); | net = replaceLayer(net,layerName,layers); |
lgraph = connectLayers(lgraph,s,d); | net = connectLayers(net,s,d); |
lgraph = disconnectLayers(lgraph,s,d); | net = disconnectLayers(net,s,d); |
plot(lgraph); | plot(net); |
dlnetwork
オブジェクトとして指定されたニューラル ネットワークに学習させるには、関数 trainnet
を使用します。
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)