ドキュメンテーションヘルプ センタードキュメンテーション
このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
層グラフの層の結合
newlgraph = connectLayers(lgraph,s,d)
例
newlgraph = connectLayers(lgraph,s,d) は、結合元の層 s を層グラフ lgraph に含まれる結合先の層 d に結合します。新しい層グラフ newlgraph には lgraph と同じ層が含まれ、結合が新しく含まれます。
newlgraph
lgraph
s
d
すべて折りたたむ
2 つの入力があり、名前が 'add_1' である加算層を作成します。
'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) ネットワークを作成します。数字のイメージを分類するようネットワークに学習させます。この例のシンプルなネットワークは、以下から構成されます。
逐次結合層による主分岐。
単一の 1 x 1 畳み込み層を含む "ショートカット結合"。ショートカット結合は、パラメーターの勾配がネットワークの出力層からより初期の層へとよりスムーズに流れるようにします。
ネットワークの主分岐を層配列として作成します。加算層では複数の入力が要素単位で合計されます。加算層で合計する入力数を指定します。すべての層に名前があり、すべての名前が一意でなければなりません。
layers = [ imageInputLayer([28 28 1],'Name','input') convolution2dLayer(5,16,'Padding','same','Name','conv_1') batchNormalizationLayer('Name','BN_1') reluLayer('Name','relu_1') convolution2dLayer(3,32,'Padding','same','Stride',2,'Name','conv_2') batchNormalizationLayer('Name','BN_2') reluLayer('Name','relu_2') convolution2dLayer(3,32,'Padding','same','Name','conv_3') batchNormalizationLayer('Name','BN_3') reluLayer('Name','relu_3') additionLayer(2,'Name','add') averagePooling2dLayer(2,'Stride',2,'Name','avpool') fullyConnectedLayer(10,'Name','fc') softmaxLayer('Name','softmax') classificationLayer('Name','classOutput')];
層配列から層グラフを作成します。layerGraph は layers のすべての層を順に結合します。層グラフをプロットします。
layerGraph
layers
lgraph = layerGraph(layers); figure plot(lgraph)
1 x 1 畳み込み層を作成し、層グラフに追加します。活性化のサイズが 'relu_3' 層の活性化のサイズと一致するように、畳み込みフィルターの数とストライドを指定します。この方法により、加算層で 'skipConv' 層と 'relu_3' 層の出力を加算できます。層がグラフに含まれることを確認するには、層グラフをプロットします。
'relu_3'
'skipConv'
skipConv = convolution2dLayer(1,32,'Stride',2,'Name','skipConv'); lgraph = addLayers(lgraph,skipConv); figure plot(lgraph)
'relu_1' 層から 'add' 層へのショートカット結合を作成します。層の作成時に加算層への入力数を 2 に指定しているため、層には 'in1' および 'in2' という名前の 2 つの入力があります。'relu_3' 層は既に 'in1' 入力に結合されています。'relu_1' 層を 'skipConv' 層に結合し、'skipConv' 層を 'add' 層の 'in2' 入力に結合します。ここで加算層は 'relu_3' 層と 'skipConv' 層の出力を合計します。層が正しく結合されていることを確認するには、層グラフをプロットします。
'relu_1'
'add'
'in1'
'in2'
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 回の反復ごとに検証データを使用してネットワークを検証します。
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 オブジェクトになります。
DAGNetwork
net
net = DAGNetwork with properties: Layers: [16×1 nnet.cnn.layer.Layer] Connections: [16×2 table] InputNames: {'input'} OutputNames: {'classOutput'}
検証イメージを分類し、精度を計算します。ネットワークは非常に正確になっています。
YPredicted = classify(net,XValidation); accuracy = mean(YPredicted == YValidation)
accuracy = 0.9930
LayerGraph
層グラフ。LayerGraph オブジェクトとして指定します。層グラフを作成するには、layerGraph を使用します。
結合元。文字ベクトルまたは string スカラーとして指定します。
結合元の層に 1 つの出力がある場合、s は層の名前です。
結合元の層に複数の出力がある場合、s は層の名前で、その後に文字 /、さらに層出力の名前が続きます ('layerName/outputName')。
'layerName/outputName'
例: 'conv1'
'conv1'
例: 'mpool/indices'
'mpool/indices'
結合先。文字ベクトルまたは string スカラーとして指定します。
結合先の層に 1 つの入力がある場合、d は層の名前です。
結合先の層に複数の入力がある場合、d は層の名前で、その後に文字 /、さらに層入力の名前が続きます ('layerName/inputName')。
'layerName/inputName'
例: 'fc'
'fc'
例: 'addlayer1/in2'
'addlayer1/in2'
出力層グラフ。LayerGraph オブジェクトとして返されます。
addLayers | assembleNetwork | disconnectLayers | layerGraph | plot | removeLayers | replaceLayer
addLayers
assembleNetwork
disconnectLayers
plot
removeLayers
replaceLayer
この例の変更されたバージョンがあります。編集された方の例を開きますか?
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
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:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Contact your local office