このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
additionLayer
説明
加算層は、複数のニューラル ネットワーク層からの入力を要素単位で加算します。
作成時に層への入力の数を指定します。層への入力の名前は 'in1','in2',...,'inN'
になります。N
は入力の数です。connectLayers
または disconnectLayers
を使用して層の結合または切り離しを行うときには、入力名を使用します。加算層へのすべての入力の次元は同じでなければなりません。
作成
プロパティ
NumInputs
— 入力の数
正の整数
層への入力の数。2 以上の正の整数として指定します。
入力の名前は 'in1','in2',...,'inN'
になります。ここで、N
は NumInputs
です。たとえば、NumInputs
が 3 である場合、入力の名前は 'in1','in2'
および 'in3'
になります。関数 connectLayers
または disconnectLayers
を使用して層の結合または切り離しを行うときには、入力名を使用します。
Name
— 層の名前
""
(既定値) | 文字ベクトル | string スカラー
層の名前。文字ベクトルまたは string スカラーとして指定します。Layer
配列入力の場合、関数 trainnet
、trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、名前が ""
の層に自動的に名前を割り当てます。
AdditionLayer
オブジェクトは、このプロパティを文字ベクトルとして格納します。
データ型: char
| string
InputNames
— 入力名
{'in1','in2',…,'inN'}
(既定値)
入力名。{'in1','in2',...,'inN'}
として指定します。ここで、N
は層の入力の数です。
データ型: cell
NumOutputs
— 出力の数
1
(既定値)
この プロパティ は読み取り専用です。
層からの出力の数。1
として返されます。この層には単一の出力のみがあります。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値)
この プロパティ は読み取り専用です。
出力名。{'out'}
として返されます。この層には単一の出力のみがあります。
データ型: cell
例
加算層の作成と結合
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
アルゴリズム
層の入力形式と出力形式
層配列内または層グラフ内の層は、書式化された dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(spatial、spatial、channel、batch) という書式で表されます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、AdditionLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は書式化されていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
各入力は、同じ形式のデータをもたなければなりません。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dlnetwork
オブジェクトでは、AdditionLayer
オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
バージョン履歴
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)