fullyConnectedLayer
全結合層
説明
全結合層は、入力ベクトルに重み行列を乗算し、バイアス ベクトルを加算します。
作成
構文
説明
は全結合層を返し、layer = fullyConnectedLayer(outputSize)OutputSize プロパティを設定します。
は、layer = fullyConnectedLayer(outputSize,dim)OperationDimension プロパティも設定します。 (R2026a 以降)
は、1 つ以上の名前と値の引数を使用して、オプションのプロパティを設定します。layer = fullyConnectedLayer(outputSize,Name=Value)
入力引数
全結合層の出力サイズ。正の整数として指定します。
この層の演算は、OperationDimension プロパティで指定された次元をフラット化した後、重み行列を乗算し、残りの次元の各要素に対して個別にバイアス ベクトルを加算します。 (R2026a 以降)
R2026a より前: この層の演算は、入力データの "S" (空間) 次元、"C" (チャネル) 次元、"U" (指定なし) 次元をフラット化した後、重み行列を乗算し、"B" (バッチ) 次元と "T" (時間) 次元の各要素に対して個別にバイアス ベクトルを加算します。
この引数は OutputSize プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
R2026a 以降
演算次元。次のいずれかの値として指定します。
"spatial-channel"— 入力データの"S"(空間) 次元と"C"(チャネル) 次元をフラット化した後、重み行列を乗算し、"B"(バッチ) 次元、"T"(時間) 次元、および"U"(指定なし) 次元の各要素に対して個別にバイアス ベクトルを加算します。正の整数 — 層の入力データ
Xの指定された次元を、層演算における行列乗算Weights*Xの内部次元として使用し、残りの各次元に対して個別に演算を適用します。
この引数は OperationDimension プロパティを設定します。
データ型: single | double | char | string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: fullyConnectedLayer(10,Name="fc1") は、出力サイズが 10、名前が "fc1" の全結合層を作成します。
R2026a 以降
他の層からの学習可能なパラメーター。次の値を 0 個以上含む string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。
"weights"— 別の層から重みを受け取ります。InputLearnablesプロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には"weights"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はWeightsプロパティの重みを使用します。"bias"— 別の層からバイアスを受け取ります。InputLearnablesプロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には"bias"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はBiasプロパティの重みを使用します。
InputLearnables で、この層が別の層から重みまたはバイアスを受け取るように指定されている場合、初期化子、学習可能なパラメーター、学習率係数、および L2 正則化係数を含む対応するプロパティは [] でなければなりません。
詳細については、Neural Network Weight Tyingを参照してください。
この引数は InputLearnables プロパティを設定します。
R2026a 以降
他の層に出力する学習可能なパラメーター。次の値を 0 個以上含む string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。
"weights"— 別の層に重みを出力します。OutputLearnablesプロパティで、この層が別の層に重みを出力するように指定されている場合、この層には"weights"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層に重みを渡します。"bias"— 別の層にバイアスを出力します。OutputLearnablesプロパティで、この層が別の層にバイアスを出力するように指定されている場合、この層には"bias"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層にバイアスを渡します。
詳細については、Neural Network Weight Tyingを参照してください。
この引数は OutputLearnables プロパティを設定します。
重みを初期化する関数。次のいずれかの値として指定します。
"glorot"— Glorot 初期化子[1] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散2/(InputSize + OutputSize)の正規分布から個別にサンプリングを行います。"he"— He 初期化子[2]を使用して重みを初期化します。He 初期化子は、平均 0、分散2/InputSizeの正規分布からサンプリングを行います。"orthogonal"— 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布に従ってサンプリングされた乱数行列 Z に対する QR 分解 Z = QR によって与えられます。[3]"narrow-normal"— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。"zeros"— 0 で重みを初期化します。"ones"— 1 で重みを初期化します。関数ハンドル — カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数の構文は
weights = func(sz)という形式でなければなりません。ここで、szは重みのサイズです。例については、カスタム重み初期化関数の指定を参照してください。[](R2026a 以降) — 重みを初期化しません。代わりに、'weights'入力からの重みを使用します。
この層では、Weights プロパティが [] であり、かつ InputLearnables プロパティでこの層が別の層から重みを受け取るように指定されていない場合にのみ、重みが初期化されます。
この引数は WeightsInitializer プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string | function_handle
バイアスを初期化する関数。次のいずれかの値として指定します。
"zeros"— 0 でバイアスを初期化します。"ones"— 1 でバイアスを初期化します。"narrow-normal"— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は
bias = func(sz)という形式でなければなりません。ここで、szはバイアスのサイズです。[](R2026a 以降) — バイアスを初期化しません。代わりに、'bias'入力からのバイアスを使用します。
この層では、Bias プロパティが [] であり、かつ InputLearnables プロパティでこの層が別の層からバイアスを受け取るように指定されていない場合にのみ、重みが初期化されます。
この引数は BiasInitializer プロパティを設定します。
データ型: char | string | function_handle
層の初期重み。行列として指定します。
InputLearnables プロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には "weights" という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層は Weights プロパティの重みを使用します。 (R2026a 以降)
層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、Weights プロパティが空でない場合、trainnet 関数は Weights プロパティを初期値として使用します。Weights プロパティが空であり、かつ InputLearnables プロパティでこの層が別の層から重みを受け取るように指定されていない場合、ソフトウェアは WeightsInitializer プロパティによって指定された初期化子を使用します。
学習時、Weights は OutputSize 行 InputSize 列の行列です。
InputLearnables で、この層が別の層から重みを受け取るように指定されている場合、WeightsInitializer、Weights、WeightLearnRateFactor、および WeightL2Factor の各プロパティは [] でなければなりません。
この引数は Weights プロパティを設定します。
データ型: single | double
層の初期バイアス。ベクトルとして指定します。
InputLearnables プロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には "bias" という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層は Bias プロパティの重みを使用します。 (R2026a 以降)
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークに学習させるときに、Bias プロパティが空でない場合、trainnet 関数は Bias プロパティを初期値として使用します。Bias が空であり、かつ InputLearnables プロパティでこの層が別の層からバイアスを受け取るように指定されていない場合、ソフトウェアは BiasInitializer プロパティによって指定された初期化子を使用します。
学習時、Bias は OutputSize 行 1 列のベクトルです。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
この引数は Bias プロパティを設定します。
データ型: single | double
重みの学習率係数。次のいずれかの値として指定します。
非負のスカラー — 指定された学習率係数を使用します。
[](R2026a 以降) — 別の層の学習率係数を使用します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor が 2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
InputLearnables が "weights" の場合、Weights、WeightsInitializer、WeightLearnRateFactor、および WeightL2Factor の各プロパティは空でなければなりません。
この引数は WeightLearnRateFactor プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
バイアスの学習率係数。次のいずれかとして指定します。
非負のスカラー — 指定された学習率係数を使用します。
[](R2026a 以降) — 別の層の学習率係数を使用します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor が 2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
この引数は BiasLearnRateFactor プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
重みの L2 正則化係数。次のいずれかの値として指定します。
非負のスカラー — 指定された正則化係数を使用します。
[](R2026a 以降) — 別の層の正則化係数を使用します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor が 2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
InputLearnables で、この層が別の層から重みを受け取るように指定されている場合、WeightsInitializer、Weights、WeightLearnRateFactor、および WeightL2Factor の各プロパティは [] でなければなりません。
この引数は WeightL2Factor プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
バイアスの L2 正則化係数。次のいずれかとして指定します。
非負のスカラー — 指定された正則化係数を使用します。
[](R2026a 以降) — 別の層の正則化係数を使用します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor が 2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
この引数は BiasL2Factor プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
プロパティ
全結合
このプロパティは、オブジェクト作成後、読み取り専用になります。FullyConnectedLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する位置入力の引数を使用します。
全結合層の出力サイズ。正の整数として指定します。
この層の演算は、OperationDimension プロパティで指定された次元をフラット化した後、重み行列を乗算し、残りの次元の各要素に対して個別にバイアス ベクトルを加算します。 (R2026a 以降)
R2026a より前: この層の演算は、入力データの "S" (空間) 次元、"C" (チャネル) 次元、"U" (指定なし) 次元をフラット化した後、重み行列を乗算し、"B" (バッチ) 次元と "T" (時間) 次元の各要素に対して個別にバイアス ベクトルを加算します。
データ型: double
R2026a 以降
このプロパティは、オブジェクト作成後、読み取り専用になります。FullyConnectedLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する位置入力の引数を使用します。
演算次元。次のいずれかの値として指定します。
'spatial-channel'— 入力データの"S"(空間) 次元と"C"(チャネル) 次元をフラット化した後、重み行列を乗算し、"B"(バッチ) 次元、"T"(時間) 次元、および"U"(指定なし) 次元の各要素に対して個別にバイアス ベクトルを加算します。正の整数 — 層の入力データ
Xの指定された次元を、層演算における行列乗算Weights*Xの内部次元として使用し、残りの各次元に対して個別に演算を適用します。
データ型: double | char
層の入力サイズ。正の整数または 'auto' として指定します。InputSize が 'auto' の場合、学習中に入力サイズが自動的に決定されます。
データ型: double | char
重み結束
R2026a 以降
このプロパティは、オブジェクト作成後、読み取り専用になります。FullyConnectedLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
他の層からの学習可能なパラメーター。次の値を 0 個以上含む cell 配列として指定します。
'Weights'— 別の層から重みを受け取ります。InputLearnablesプロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には"weights"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はWeightsプロパティの重みを使用します。'Bias'— 別の層からバイアスを受け取ります。InputLearnablesプロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には"bias"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はBiasプロパティの重みを使用します。
InputLearnables で、この層が別の層から重みまたはバイアスを受け取るように指定されている場合、初期化子、学習可能なパラメーター、学習率係数、および L2 正則化係数を含む対応するプロパティは [] でなければなりません。
詳細については、Neural Network Weight Tyingを参照してください。
データ型: cell
R2026a 以降
このプロパティは、オブジェクト作成後、読み取り専用になります。FullyConnectedLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
他の層に出力する学習可能なパラメーター。次の値を 0 個以上含む文字ベクトルの cell 配列として指定します。
'Weights'— 別の層に重みを出力します。OutputLearnablesプロパティで、この層が別の層に重みを出力するように指定されている場合、この層には"weights"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層に重みを渡します。'Bias'— 別の層にバイアスを出力します。OutputLearnablesプロパティで、この層が別の層にバイアスを出力するように指定されている場合、この層には"bias"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層にバイアスを渡します。
詳細については、Neural Network Weight Tyingを参照してください。
データ型: cell
パラメーターと初期化
重みを初期化する関数。次のいずれかの値として指定します。
'glorot'— Glorot 初期化子[1] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散2/(InputSize + OutputSize)の正規分布から個別にサンプリングを行います。'he'— He 初期化子[2]を使用して重みを初期化します。He 初期化子は、平均 0、分散2/InputSizeの正規分布からサンプリングを行います。'orthogonal'— 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布に従ってサンプリングされた乱数行列 Z に対する QR 分解 Z = QR によって与えられます。[3]'narrow-normal'— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。'zeros'— 0 で重みを初期化します。'ones'— 1 で重みを初期化します。関数ハンドル — カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数の構文は
weights = func(sz)という形式でなければなりません。ここで、szは重みのサイズです。例については、カスタム重み初期化関数の指定を参照してください。[](R2026a 以降) — 重みを初期化しません。代わりに、'weights'入力からの重みを使用します。
この層では、Weights プロパティが [] であり、かつ InputLearnables プロパティでこの層が別の層から重みを受け取るように指定されていない場合にのみ、重みが初期化されます。
データ型: double | char | string | function_handle
バイアスを初期化する関数。次のいずれかの値として指定します。
'zeros'— 0 でバイアスを初期化します。'ones'— 1 でバイアスを初期化します。'narrow-normal'— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は
bias = func(sz)という形式でなければなりません。ここで、szはバイアスのサイズです。[](R2026a 以降) — バイアスを初期化しません。代わりに、'bias'入力からのバイアスを使用します。
この層では、Bias プロパティが [] であり、かつ InputLearnables プロパティでこの層が別の層からバイアスを受け取るように指定されていない場合にのみ、重みが初期化されます。
データ型: double | char | string | function_handle
層の初期重み。行列として指定します。
InputLearnables プロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には "weights" という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層は Weights プロパティの重みを使用します。 (R2026a 以降)
層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、Weights プロパティが空でない場合、trainnet 関数は Weights プロパティを初期値として使用します。Weights プロパティが空であり、かつ InputLearnables プロパティでこの層が別の層から重みを受け取るように指定されていない場合、ソフトウェアは WeightsInitializer プロパティによって指定された初期化子を使用します。
学習時、Weights は OutputSize 行 InputSize 列の行列です。
InputLearnables で、この層が別の層から重みを受け取るように指定されている場合、WeightsInitializer、Weights、WeightLearnRateFactor、および WeightL2Factor の各プロパティは [] でなければなりません。
データ型: single | double
層の初期バイアス。ベクトルとして指定します。
InputLearnables プロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には "bias" という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層は Bias プロパティの重みを使用します。 (R2026a 以降)
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークに学習させるときに、Bias プロパティが空でない場合、trainnet 関数は Bias プロパティを初期値として使用します。Bias が空であり、かつ InputLearnables プロパティでこの層が別の層からバイアスを受け取るように指定されていない場合、ソフトウェアは BiasInitializer プロパティによって指定された初期化子を使用します。
学習時、Bias は OutputSize 行 1 列のベクトルです。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
データ型: single | double
学習率および正則化
重みの学習率係数。次のいずれかの値として指定します。
非負のスカラー — 指定された学習率係数を使用します。
[](R2026a 以降) — 別の層の学習率係数を使用します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor が 2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
InputLearnables が "weights" の場合、Weights、WeightsInitializer、WeightLearnRateFactor、および WeightL2Factor の各プロパティは空でなければなりません。
データ型: double
バイアスの学習率係数。次のいずれかとして指定します。
非負のスカラー — 指定された学習率係数を使用します。
[](R2026a 以降) — 別の層の学習率係数を使用します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor が 2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
データ型: double
重みの L2 正則化係数。次のいずれかの値として指定します。
非負のスカラー — 指定された正則化係数を使用します。
[](R2026a 以降) — 別の層の正則化係数を使用します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor が 2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
InputLearnables で、この層が別の層から重みを受け取るように指定されている場合、WeightsInitializer、Weights、WeightLearnRateFactor、および WeightL2Factor の各プロパティは [] でなければなりません。
データ型: double
バイアスの L2 正則化係数。次のいずれかとして指定します。
非負のスカラー — 指定された正則化係数を使用します。
[](R2026a 以降) — 別の層の正則化係数を使用します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor が 2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
InputLearnables で、この層が別の層からバイアスを受け取るように指定されている場合、BiasInitializer、Bias、BiasLearnRateFactor、および BiasL2Factor の各プロパティは [] でなければなりません。
データ型: double
層
この プロパティ は読み取り専用です。
層への入力の数。正の整数として格納されます。
入力の数は InputLearnables プロパティによって異なります。
既定では、この層には層の入力データに対応する
"in"という名前の入力があります。InputLearnablesプロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には"weights"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はWeightsプロパティの重みを使用します。InputLearnablesプロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には"bias"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はBiasプロパティの重みを使用します。
データ型: double
この プロパティ は読み取り専用です。
入力名。文字ベクトルの cell 配列として格納されます。
入力の数は InputLearnables プロパティによって異なります。
既定では、この層には層の入力データに対応する
"in"という名前の入力があります。InputLearnablesプロパティで、この層が別の層から重みを受け取るように指定されている場合、この層には"weights"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はWeightsプロパティの重みを使用します。InputLearnablesプロパティで、層が別の層からバイアスを受け取るように指定されている場合、この層には"bias"という名前の追加の入力があります。この場合、層はこの入力に渡された値を使用して層処理を行います。それ以外の場合、この層はBiasプロパティの重みを使用します。
データ型: cell
層からの出力の数。正の整数として格納されます。
出力の数は OutputLearnables プロパティによって異なります。
既定では、この層には層の出力データに対応する
"out"という名前の出力があります。OutputLearnablesプロパティで、この層が別の層に重みを出力するように指定されている場合、この層には"weights"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層に重みを渡します。OutputLearnablesプロパティで、この層が別の層にバイアスを出力するように指定されている場合、この層には"bias"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層にバイアスを渡します。
データ型: double
この プロパティ は読み取り専用です。
出力名。文字ベクトルの cell 配列として格納されます。
出力の数は OutputLearnables プロパティによって異なります。
既定では、この層には層の出力データに対応する
"out"という名前の出力があります。OutputLearnablesプロパティで、この層が別の層に重みを出力するように指定されている場合、この層には"weights"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層に重みを渡します。OutputLearnablesプロパティで、この層が別の層にバイアスを出力するように指定されている場合、この層には"bias"という名前の追加の出力があります。この場合、この層はこの出力を使用して他の層にバイアスを渡します。
データ型: cell
例
出力サイズが 10、名前が fc1 の全結合層を作成します。
layer = fullyConnectedLayer(10,Name="fc1")layer =
FullyConnectedLayer with properties:
Name: 'fc1'
Hyperparameters
InputSize: 'auto'
OutputSize: 10
OperationDimension: 'spatial-channel'
Learnable Parameters
Weights: []
Bias: []
Show all properties
Layer 配列に全結合層を含めます。
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,Stride=2)
fullyConnectedLayer(10)
softmaxLayer]layers =
6×1 Layer array with layers:
1 '' Image Input 28×28×1 images with 'zerocenter' normalization
2 '' 2-D Convolution 20 5×5 convolutions with stride [1 1] and padding [0 0 0 0]
3 '' ReLU ReLU
4 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
5 '' Fully Connected Fully connected layer with output size 10
6 '' Softmax Softmax
重みとバイアスの初期化子関数を指定するには、それぞれ WeightsInitializer プロパティと BiasInitializer プロパティを使用します。重みとバイアスを直接指定するには、それぞれ Weights プロパティと Bias プロパティを使用します。
初期化関数の指定
出力サイズが 10 の全結合層を作成し、重み初期化子を He 初期化子に指定します。
outputSize = 10; layer = fullyConnectedLayer(outputSize,'WeightsInitializer','he')
layer =
FullyConnectedLayer with properties:
Name: ''
Hyperparameters
InputSize: 'auto'
OutputSize: 10
OperationDimension: 'spatial-channel'
Learnable Parameters
Weights: []
Bias: []
Show 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
OperationDimension: 'spatial-channel'
Learnable Parameters
Weights: []
Bias: []
Show 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
OperationDimension: 'spatial-channel'
Learnable Parameters
Weights: [10×720 double]
Bias: [10×1 double]
Show all properties
ここで、Weights プロパティおよび Bias プロパティには指定した値が含まれます。学習時に、これらのプロパティが空ではない場合、指定した値が初期の重みとバイアスとして使用されます。この場合、初期化子関数は使用されません。
アルゴリズム
全結合層は、入力ベクトルに重み行列を乗算し、バイアス ベクトルを加算します。
この層の演算は、OperationDimension プロパティで指定された次元をフラット化した後、重み行列を乗算し、残りの次元の各要素に対して個別にバイアス ベクトルを加算します。 (R2026a 以降)
R2026a より前: この層の演算は、入力データの "S" (空間) 次元、"C" (チャネル) 次元、"U" (指定なし) 次元をフラット化した後、重み行列を乗算し、"B" (バッチ) 次元と "T" (時間) 次元の各要素に対して個別にバイアス ベクトルを加算します。
入力の各フラット化ベクトル x に対して、対応する出力ベクトル y は次の式で与えられます。
ここで、W および b はそれぞれ重みおよびバイアスを表し、i および k はそれぞれフラット化された入力の演算次元および出力次元のインデックスです。
たとえば、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応するシーケンスのバッチを表す配列において、チャネル次元のみに対して動作する全結合演算の場合、出力は次の式で与えられます。
ここで、X および Y はそれぞれ入力データおよび出力データで、i、n、および t はそれぞれ入力チャネル、観測値、およびタイム ステップのインデックスであり、k は出力次元のインデックスです。
層配列内または層グラフ内の大半の層は、形式を整えた dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB" (空間、空間、チャネル、バッチ) という形式で記述できます。
以下などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。
カスタム層を開発する
functionLayerオブジェクトを使用する
出力形式は、入力データと OperationDimension プロパティによって異なります。次の表は、OperationDimension プロパティが "spatial-channel" の場合の FullyConnectedLayer オブジェクトでサポートされる入力形式と、それに対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S" (空間) 次元または "U" (未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
| 入力形式 | 出力形式 |
|---|---|
|
|
| |
| |
| |
|
|
|
|
| |
| |
|
|
| |
| |
|
|
| |
| |
|
この層は、追加の "U" (指定なし) 次元をもつデータをサポートします。"U" (指定なし) 次元の大きさが 1 でない場合、OperationDimension を正の整数に設定しなければなりません。 (R2026a 以降)
R2026a より前: 追加の "U" (指定なし) 次元の大きさは 1 でなければなりません。
入力データが形式を整えた dlarray オブジェクトであり、かつ OperationDimension プロパティが正の整数である場合、出力形式は入力形式と一致します。
この層は、形式を整えていないデータに対する直接の演算もサポートし、形式を整えていないデータを返します。この場合、OperationDimension プロパティの値は正の整数でなければなりません。 (R2026a 以降)
InputLearnables で、この層が別の層から重みまたはバイアスを受け取るように指定されている場合、対応する入力の重みまたはバイアスは、形式を整えていない dlarray オブジェクト、または "U" (指定なし) 次元のみを含む形式の、形式を整えた dlarray オブジェクトでなければなりません。
OutputFormats でこの層が重みまたはバイアスを別の層に出力するように指定されている場合、対応する出力の重みまたはバイアスの形式は InputLearnables の値によって異なります。
OutputLearnablesの値のうちInputLearnablesの値と一致するものについては、対応する出力データが対応する入力データと同一になります。OutputLearnablesの値のうちInputLearnablesの値と一致しないものについては、対応する出力データの形式が整っていません。
参照
[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.
拡張機能
使用上の注意および制限:
コード生成では、
"U"(指定なし) の次元をもつdlarrayオブジェクトをこの層に渡すことはサポートされていません。OperationDimensionプロパティは"spatial-channel"でなければなりません。InputLearnablesプロパティとOutputLearnablesプロパティは空でなければなりません。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同様の、使用上の注意および制限が適用されます。
バージョン履歴
R2016a で導入学習可能なパラメーターを他の層と共有するには (重み結束とも呼ばれる)、InputLearnables プロパティと OutputLearnables プロパティを使用します。
他の層から学習可能なパラメーターを受け取る入力を作成するには、
InputLearnablesプロパティを使用します。学習可能なパラメーターを他の層に渡す出力を作成するには、
OuputLearnablesプロパティを使用します。
詳細については、Neural Network Weight Tyingを参照してください。
dim 引数を使用して、層が操作する入力データの次元を指定します。
R2024a 以降、DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトは非推奨となりました。代わりに dlnetwork オブジェクトを使用してください。
DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトのサポートを削除する予定はありません。ただし、dlnetwork オブジェクトには次の利点があるため、代わりにこのオブジェクトを使うことを推奨します。
dlnetworkオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。dlnetworkオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。関数
trainnetはdlnetworkオブジェクトをサポートしているため、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。dlnetworkオブジェクトを使用した学習と予測は、通常、LayerGraphとtrainNetworkを使用したワークフローよりも高速です。
学習済みの DAGNetwork オブジェクトまたは SeriesNetwork オブジェクトを dlnetwork オブジェクトに変換するには、関数 dag2dlnetwork を使用します。
DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトと比べ、dlnetwork オブジェクトでは全結合層の動作が多少異なります。全結合層は出力をフラットにします。出力データを形状変更することにより、空間データをチャネル次元で符号化します。SeriesNetwork オブジェクトと DAGNetwork オブジェクトの全結合層は、サイズ 1 の空間次元をもつデータを出力することにより、入力と同じ数の空間次元をもつデータを出力します。dlnetwork オブジェクトの全結合層は、出力の空間次元を削除します。
R2019a 以降では、既定で、Glorot 初期化子を使用してこの層の重みが初期化されます。この動作は、学習を安定化させるのに役立ち、通常は深いネットワークの学習時間を短縮します。
以前のリリースでは、既定で、平均 0、分散 0.01 の正規分布からサンプリングを行って、層の重みが初期化されます。この動作を再現するには、層の 'WeightsInitializer' オプションを 'narrow-normal' に設定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)