fullyConnectedLayer
全結合層
説明
全結合層は、入力に重み行列を乗算し、バイアス ベクトルを加算します。
作成
説明
は全結合層を返し、layer
= fullyConnectedLayer(outputSize
)OutputSize
プロパティを指定します。
は、名前と値のペアを使用して、オプションの パラメーターと初期化、学習率および正則化、および layer
= fullyConnectedLayer(outputSize
,Name,Value
)Name
の各プロパティを設定します。たとえば、fullyConnectedLayer(10,'Name','fc1')
は、出力サイズが 10、名前が 'fc1'
である全結合層を作成します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。
プロパティ
全結合
OutputSize
— 出力サイズ
正の整数
全結合層の出力サイズ。正の整数として指定します。
例: 10
InputSize
— 入力サイズ
'auto'
(既定値) | 正の整数
全結合層の入力サイズ。正の整数または 'auto'
として指定します。InputSize
が 'auto'
の場合、学習中に入力サイズが自動的に決定されます。
パラメーターと初期化
WeightsInitializer
— 重みを初期化する関数
'glorot'
(既定値) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| 関数ハンドル
重みを初期化する関数。次のいずれかに指定します。
'glorot'
– Glorot 初期化子 [1] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散2/(InputSize + OutputSize)
の一様分布から個別にサンプリングを行います。'he'
– He 初期化子 [2] を使用して重みを初期化します。He 初期化子は、平均 0、分散2/InputSize
の正規分布からサンプリングを行います。'orthogonal'
– 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[3]'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。'zeros'
– 0 で重みを初期化します。'ones'
– 1 で重みを初期化します。関数ハンドル – カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数は
weights = func(sz)
という形式でなければなりません。ここで、sz
は重みのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Weights
プロパティが空の場合にのみ重みが初期化されます。
データ型: char
| string
| function_handle
BiasInitializer
— バイアスを初期化する関数
"zeros"
(既定値) | "narrow-normal"
| "ones"
| 関数ハンドル
バイアスを初期化する関数。次のいずれかの値として指定します。
"zeros"
— 0 でバイアスを初期化します。"ones"
— 1 でバイアスを初期化します。"narrow-normal"
— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は
bias = func(sz)
という形式でなければなりません。ここで、sz
はバイアスのサイズです。
この層では、Bias
プロパティが空の場合にのみバイアスが初期化されます。
データ型: char
| string
| function_handle
Weights
— 層の重み
[]
(既定値) | 行列
層の重み。行列として指定します。
層の重みは学習可能なパラメーターです。層の Weights
プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、層の Weights
プロパティが空ではない場合、関数 trainnet
および trainNetwork
は Weights
プロパティを初期値として使用します。Weights
プロパティが空の場合、ソフトウェアは層の WeightsInitializer
プロパティによって指定された初期化子を使用します。
学習時、Weights
は OutputSize
行 InputSize
列の行列です。
データ型: single
| double
Bias
— 層のバイアス
[]
(既定値) | 行列
層のバイアス。行列として指定します。
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークの学習時に、Bias
が空ではない場合、関数 trainnet
および trainNetwork
は Bias
プロパティを初期値として使用します。Bias
が空の場合、ソフトウェアは BiasInitializer
によって指定された初期化子を使用します。
学習時、Bias
は OutputSize
行 1
列の行列です。
データ型: single
| double
学習率および正則化
WeightLearnRateFactor
— 重みの学習率係数
1
(既定値) | 非負のスカラー
重みの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor
が 2
の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasLearnRateFactor
— バイアスの学習率係数
1
(既定値) | 非負のスカラー
バイアスの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor
が 2
の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WeightL2Factor
— 重みの L2 正則化係数
1 (既定値) | 非負のスカラー
重みの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor
が 2
の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasL2Factor
— バイアスの L2 正則化係数
0
(既定値) | 非負のスカラー
バイアスの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor
が 2
の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
層
Name
— 層の名前
""
(既定値) | 文字ベクトル | string スカラー
層の名前。文字ベクトルまたは string スカラーとして指定します。Layer
配列入力の場合、関数 trainnet
、trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、名前が ""
の層に自動的に名前を割り当てます。
FullyConnectedLayer
オブジェクトは、このプロパティを文字ベクトルとして格納します。
データ型: char
| string
NumInputs
— 入力の数
1
(既定値)
この プロパティ は読み取り専用です。
層への入力の数。1
として返されます。この層は単一の入力のみを受け入れます。
データ型: double
InputNames
— 入力名
{'in'}
(既定値)
この プロパティ は読み取り専用です。
入力名。{'in'}
として返されます。この層は単一の入力のみを受け入れます。
データ型: cell
NumOutputs
— 出力の数
1
(既定値)
この プロパティ は読み取り専用です。
層からの出力の数。1
として返されます。この層には単一の出力のみがあります。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値)
この プロパティ は読み取り専用です。
出力名。{'out'}
として返されます。この層には単一の出力のみがあります。
データ型: cell
例
全結合層の作成
出力サイズが 10、名前が 'fc1'
の全結合層を作成します。
layer = fullyConnectedLayer(10,'Name','fc1')
layer = FullyConnectedLayer with properties: Name: 'fc1' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Layer
配列に全結合層を含めます。
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer]
layers = 7x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' 2-D Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' ReLU ReLU 4 '' 2-D Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax 7 '' Classification Output crossentropyex
全結合層の初期の重みとバイアスの指定
重みとバイアスの初期化子関数を指定するには、それぞれ WeightsInitializer
プロパティと BiasInitializer
プロパティを使用します。重みとバイアスを直接指定するには、それぞれ Weights
プロパティと Bias
プロパティを使用します。
初期化関数の指定
出力サイズが 10 の全結合層を作成し、重み初期化子を He 初期化子に指定します。
outputSize = 10; layer = fullyConnectedLayer(outputSize,'WeightsInitializer','he')
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Weights
プロパティおよび Bias
プロパティは空になることに注意してください。学習時に、これらのプロパティは指定した初期化関数を使用して初期化されます。
カスタム初期化関数の指定
重みとバイアスの独自の初期化関数を指定するには、関数ハンドルに WeightsInitializer
プロパティおよび BiasInitializer
プロパティを設定します。これらのプロパティに、重みとバイアスのサイズを入力として取り、初期化値を出力する関数ハンドルを指定します。
出力サイズが 10 の全結合層を作成し、標準偏差 0.0001 のガウス分布から重みとバイアスをサンプリングする初期化子を指定します。
outputSize = 10; weightsInitializationFcn = @(sz) rand(sz) * 0.0001; biasInitializationFcn = @(sz) rand(sz) * 0.0001; layer = fullyConnectedLayer(outputSize, ... 'WeightsInitializer',@(sz) rand(sz) * 0.0001, ... 'BiasInitializer',@(sz) rand(sz) * 0.0001)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
ここでも、Weights
プロパティおよび Bias
プロパティは空になります。学習時に、これらのプロパティは指定した初期化関数を使用して初期化されます。
重みおよびバイアスの直接指定
出力サイズが 10 の全結合層を作成し、MAT ファイル FCWeights.mat
で重みとバイアスをそれぞれ W
と b
に設定します。
outputSize = 10; load FCWeights layer = fullyConnectedLayer(outputSize, ... 'Weights',W, ... 'Bias',b)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 720 OutputSize: 10 Learnable Parameters Weights: [10x720 double] Bias: [10x1 double] Use properties method to see a list of all properties.
ここで、Weights
プロパティおよび Bias
プロパティには指定した値が含まれます。学習時に、これらのプロパティが空ではない場合、指定した値が初期の重みとバイアスとして使用されます。この場合、初期化子関数は使用されません。
アルゴリズム
全結合層
全結合層は、入力に重み行列を乗算し、バイアス ベクトルを加算します。
その名前からわかるように、全結合層のすべてのニューロンは前の層にあるすべてのニューロンに結合しています。この層は、前の層によってイメージ全体で学習されたすべての特徴 (ローカル情報) を組み合わせて、より大きなパターンを特定します。分類問題の場合、最後の全結合層は、特徴を組み合わせてイメージを分類します。そのため、ネットワークにある最後の全結合層の引数 outputSize
は、データセットのクラスの数と等しくなります。回帰問題の場合、出力サイズは応答変数の数と等しくなければなりません。
全結合層を作成するときに、関連する名前と値のペアの引数を使用して、この層の学習率と正則化パラメーターも調整できます。調整しないことを選択した場合、ソフトウェアは関数 trainingOptions
で定義されたグローバル学習パラメーターを使用します。グローバル学習オプションと層の学習オプションの詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。
層への入力がシーケンスの場合 (LSTM ネットワークの場合など)、全結合層は各タイム ステップで独立に動作します。たとえば、全結合層の前の層が、サイズ D x N x S の配列 X を出力する場合、全結合層はサイズ outputSize
x N x S の配列 Z を出力します。タイム ステップ t で、Z の対応するエントリは です。ここで、 は、タイム ステップ t の X を表します。
全結合層は出力をフラットにします。出力データを形状変更することにより、空間データをチャネル次元で符号化します。SeriesNetwork
オブジェクトと DAGNetwork
オブジェクトの全結合層は、サイズ 1 の空間次元をもつデータを出力することにより、入力と同じ数の空間次元をもつデータを出力します。dlnetwork
オブジェクトの全結合層は、出力の空間次元を削除します。
層の入力形式と出力形式
層配列内または層グラフ内の層は、書式化された dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(spatial、spatial、channel、batch) という書式で表されます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、FullyConnectedLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は書式化されていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
入力形式 | 出力形式 | |
---|---|---|
SeriesNetwork オブジェクトおよび DAGNetwork オブジェクト | dlnetwork オブジェクト | |
|
|
|
|
| |
|
| |
|
| |
|
|
|
|
|
|
| ||
|
dlnetwork
オブジェクトでは、FullyConnectedLayer
オブジェクトも以下の入力形式と出力形式の組み合わせをサポートします。
入力形式 | 出力形式 |
---|---|
|
|
| |
| |
|
|
| |
| |
|
trainNetwork
ワークフローでこれらの入力形式を使用するには、まず、flattenLayer
を使用してデータを "CBT"
(channel、batch、time) の形式に変換します。
参照
[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123
[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” Preprint, submitted February 19, 2014. https://arxiv.org/abs/1312.6120.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
バージョン履歴
R2016a で導入R2019a: 既定の重みの初期化は Glorot
R2019a 以降では、既定で、Glorot 初期化子を使用してこの層の重みが初期化されます。この動作は、学習を安定化させるのに役立ち、通常は深いネットワークの学習時間を短縮します。
以前のリリースでは、既定で、平均 0、分散 0.01 の正規分布からサンプリングを行って、層の重みが初期化されます。この動作を再現するには、層の 'WeightsInitializer'
オプションを 'narrow-normal'
に設定します。
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)