Main Content

replaceLayer

ニューラル ネットワークの層の置き換え

説明

netUpdated = replaceLayer(net,layerName,layers) は、dlnetwork オブジェクト net の層 layerNamelayers の層に置き換えます。

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)

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

層へのパスを指定して最初の 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);

入力引数

すべて折りたたむ

ニューラル ネットワーク。dlnetwork オブジェクトとして指定します。

置き換える層の名前。string スカラーまたは文字ベクトルとして指定します。

ネットワーク層。Layer 配列として指定します。

組み込み層の一覧については、深層学習層の一覧を参照してください。

入れ子層へのパス。文字ベクトルまたは 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

層を再結合する方法。次のいずれかとして指定します。

  • "name" – 置き換えられた層の入力名と出力名を使用して、layers を再結合します。置き換えられた層の入力に結合された各層について、layers(1) と同じ入力名をもつ入力に層を再結合します。置き換えられた層の出力に結合された各層について、layers(end) と同じ出力名をもつ出力に層を再結合します。

  • "order"layers(1) の入力名と layers(end) の出力名の順序を使用して、layers を再結合します。置き換えられた層の i 番目の入力に結合されている層を、layers(1)i 番目の入力に再結合します。置き換えられた層の j 番目の出力に結合されている層を、layers(end)j 番目の出力に再結合します。

出力引数

すべて折りたたむ

更新されたネットワーク。未初期化の dlnetwork オブジェクトとして返されます。

dlnetwork オブジェクトの学習可能なパラメーターを初期化するには、関数 initialize を使用します。

関数 replaceLayer は量子化情報を保持しません。入力ネットワークが量子化されたネットワークであった場合でも、出力ネットワークに量子化情報は含まれません。

バージョン履歴

R2018b で導入

すべて展開する