このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
connectLayers
層グラフまたはネットワークの層の結合
説明
は、結合元の層 lgraphUpdated
= connectLayers(lgraph
,s
,d
)s
を層グラフ lgraph
に含まれる結合先の層 d
に結合します。更新された層グラフ lgraphUpdated
には lgraph
と同じ層が含まれ、結合が新しく含まれます。
は、結合元の層 netUpdated
= connectLayers(net
,s
,d
)s
を dlnetwork
オブジェクト net
に含まれる結合先の層 d
に結合します。更新されたネットワーク netUpdated
には net
と同じ層が含まれ、結合が新しく含まれます。
例
加算層の作成と結合
2 つの入力があり、名前が 'add_1'
である加算層を作成します。
add = additionLayer(2,'Name','add_1')
add = AdditionLayer with properties: Name: 'add_1' NumInputs: 2 InputNames: {'in1' 'in2'}
2 つの ReLU 層を作成し、これらの層を加算層に結合します。加算層で ReLU 層の出力が加算されます。
relu_1 = reluLayer('Name','relu_1'); relu_2 = reluLayer('Name','relu_2'); lgraph = layerGraph; lgraph = addLayers(lgraph,relu_1); lgraph = addLayers(lgraph,relu_2); lgraph = addLayers(lgraph,add); lgraph = connectLayers(lgraph,'relu_1','add_1/in1'); lgraph = connectLayers(lgraph,'relu_2','add_1/in2'); plot(lgraph)
シンプルな DAG ネットワークの作成
深層学習用のシンプルな有向非循環グラフ (DAG) ネットワークを作成します。数字のイメージを分類するようネットワークに学習させます。この例のシンプルなネットワークは、以下から構成されます。
逐次結合層による主分岐。
単一の 1 x 1 畳み込み層を含む "ショートカット結合"。ショートカット結合は、パラメーターの勾配がネットワークの出力層からより初期の層へとよりスムーズに流れるようにします。
ネットワークの主分岐を層配列として作成します。加算層では複数の入力が要素単位で合計されます。加算層で合計する入力数を指定します。後で簡単に結合を追加できるように、最初の ReLU 層と加算層の名前を指定します。
layers = [ imageInputLayer([28 28 1]) 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') averagePooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];
層配列から層グラフを作成します。layerGraph
は layers
のすべての層を順に結合します。層グラフをプロットします。
lgraph = layerGraph(layers); figure plot(lgraph)
1 x 1 畳み込み層を作成し、層グラフに追加します。活性化のサイズが 3 番目の ReLU 層の活性化のサイズと一致するように、畳み込みフィルターの数とストライドを指定します。この方法により、加算層で 3 番目の ReLU 層と 1 x 1 畳み込み層の出力を加算できます。層がグラフに含まれることを確認するには、層グラフをプロットします。
skipConv = convolution2dLayer(1,32,'Stride',2,'Name','skipConv'); lgraph = addLayers(lgraph,skipConv); figure plot(lgraph)
'relu_1'
層から 'add'
層へのショートカット結合を作成します。層の作成時に加算層への入力数を 2 に指定しているため、層には 'in1'
および 'in2'
という名前の 2 つの入力があります。3 番目の ReLU 層は既に 'in1'
入力に結合されています。'relu_1'
層を 'skipConv'
層に結合し、'skipConv'
層を 'add'
層の 'in2'
入力に結合します。ここで加算層は 3 番目の ReLU 層と 'skipConv'
層の出力を合計します。層が正しく結合されていることを確認するには、層グラフをプロットします。
lgraph = connectLayers(lgraph,'relu_1','skipConv'); lgraph = connectLayers(lgraph,'skipConv','add/in2'); figure plot(lgraph);
数字の 28 x 28 のグレースケール イメージで構成される学習データと検証データを読み込みます。
[XTrain,YTrain] = digitTrain4DArrayData; [XValidation,YValidation] = digitTest4DArrayData;
学習オプションを指定してネットワークに学習させます。trainNetwork
は、ValidationFrequency
回の反復ごとに検証データを使用してネットワークを検証します。
options = trainingOptions('sgdm', ... 'MaxEpochs',8, ... 'Shuffle','every-epoch', ... 'ValidationData',{XValidation,YValidation}, ... 'ValidationFrequency',30, ... 'Verbose',false, ... 'Plots','training-progress'); net = trainNetwork(XTrain,YTrain,lgraph,options);
学習済みネットワークのプロパティを表示します。ネットワークは DAGNetwork
オブジェクトになります。
net
net = DAGNetwork with properties: Layers: [16x1 nnet.cnn.layer.Layer] Connections: [16x2 table] InputNames: {'imageinput'} OutputNames: {'classoutput'}
検証イメージを分類し、精度を計算します。ネットワークは非常に正確になっています。
YPredicted = classify(net,XValidation); accuracy = mean(YPredicted == YValidation)
accuracy = 0.9934
入力引数
lgraph
— 層グラフ
LayerGraph
オブジェクト
層グラフ。LayerGraph
オブジェクトとして指定します。層グラフを作成するには、layerGraph
を使用します。
net
— ニューラル ネットワーク
dlnetwork
オブジェクト
ニューラル ネットワーク。dlnetwork
オブジェクトとして指定します。
s
— 結合元
文字ベクトル | string スカラー
結合元。文字ベクトルまたは string スカラーとして指定します。
結合元の層に 1 つの出力がある場合、
s
は層の名前です。結合元の層に複数の出力がある場合、
s
は層の名前で、その後に文字 /、さらに層出力の名前が続きます ('layerName/outputName'
)。
例: 'conv1'
例: 'mpool/indices'
d
— 結合先
文字ベクトル | string スカラー
結合先。文字ベクトルまたは string スカラーとして指定します。
結合先の層に 1 つの入力がある場合、
d
は層の名前です。結合先の層に複数の入力がある場合、
d
は層の名前で、その後に文字 /、さらに層入力の名前が続きます ('layerName/inputName'
)。
例: 'fc'
例: 'addlayer1/in2'
出力引数
lgraphUpdated
— 更新された層グラフ
LayerGraph
オブジェクト
更新された層グラフ。LayerGraph
オブジェクトとして返されます。
netUpdated
— 更新されたネットワーク
dlnetwork
オブジェクト
更新されたネットワーク。未初期化の dlnetwork
オブジェクトとして返されます。
dlnetwork
オブジェクトの学習可能なパラメーターを初期化するには、関数 initialize
を使用します。
関数 connectLayers
は量子化情報を保持しません。入力ネットワークが量子化されたネットワークであった場合でも、出力ネットワークに量子化情報は含まれません。
バージョン履歴
R2017b で導入
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)