ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fullyConnectedLayer

説明

全結合層は、入力に重み行列を乗算し、バイアス ベクトルを加算します。

作成

説明

layer = fullyConnectedLayer(outputSize) は全結合層を返し、OutputSize プロパティを指定します。

layer = fullyConnectedLayer(outputSize,Name,Value) は、名前と値のペアを使用して、オプションの パラメーターと初期化学習率および正則化、および Name の各プロパティを設定します。たとえば、fullyConnectedLayer(10,'Name','fc1') は、出力サイズが 10、名前が 'fc1' である全結合層を作成します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。

プロパティ

すべて展開する

全結合

全結合層の出力サイズ。正の整数として指定します。

例: 10

全結合層の入力サイズ。正の整数または 'auto' として指定します。InputSize'auto' の場合、学習中に入力サイズが自動的に決定されます。

パラメーターと初期化

重みを初期化する関数。次のいずれかに指定します。

  • '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 は重みのサイズです。たとえば、Specify Custom Weight Initialization Functionを参照してください。

この層では、Weights プロパティが空の場合にのみ重みが初期化されます。

データ型: char | string | function_handle

バイアスを初期化する関数。次のいずれかに指定します。

  • 'zeros' – 0 でバイアスを初期化します。

  • 'ones' – 1 でバイアスを初期化します。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。

  • 関数ハンドル – カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は bias = func(sz) という形式でなければなりません。ここで、sz はバイアスのサイズです。

この層では、Bias プロパティが空の場合にのみバイアスが初期化されます。

データ型: char | string | function_handle

層の重み。行列として指定します。

層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みに直接、初期値を指定できます。ネットワークの学習時に、層の Weights プロパティが空ではない場合、trainNetworkWeights プロパティを初期値として使用します。Weights プロパティが空の場合、trainNetwork は層の WeightsInitializer プロパティによって指定された初期化子を使用します。

学習時、WeightsOutputSizeInputSize 列の行列です。

データ型: single | double

層のバイアス。行列として指定します。

層のバイアスは学習可能なパラメーターです。ネットワークの学習時に、Bias が空ではない場合、trainNetworkBias プロパティを初期値として使用します。Bias が空の場合、trainNetworkBiasInitializer によって指定された初期化子を使用します。

学習時、BiasOutputSize1 列の行列です。

データ型: single | double

学習率および正則化

重みの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor が 2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

例: 2

バイアスの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor が 2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

例: 2

重みの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor が 2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

例: 2

バイアスの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor が 2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

例: 2

層の名前。文字ベクトルまたは string スカラーとして指定します。層グラフに層を含めるには、空ではない一意の層の名前を指定しなければなりません。この層が含まれる系列ネットワークに学習させて Name'' に設定すると、学習時に層に名前が自動的に割り当てられます。

データ型: char | string

層の入力の数。この層は単一の入力のみを受け入れます。

データ型: double

層の入力名。この層は単一の入力のみを受け入れます。

データ型: cell

層の出力の数。この層には単一の出力のみがあります。

データ型: double

層の出力名。この層には単一の出力のみがあります。

データ型: cell

すべて折りたたむ

出力サイズが 10、名前が 'fc1' の全結合層を作成します。

layer = fullyConnectedLayer(10,'Name','fc1')
layer = 
  FullyConnectedLayer with properties:

          Name: 'fc1'

   Hyperparameters
     InputSize: 'auto'
    OutputSize: 10

   Learnable Parameters
       Weights: []
          Bias: []

  Show 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   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   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: []

  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

   Learnable Parameters
       Weights: []
          Bias: []

  Show all properties

ここでも、Weights プロパティおよび Bias プロパティは空になります。学習時に、これらのプロパティは指定した初期化関数を使用して初期化されます。

重みおよびバイアスの直接指定

出力サイズが 10 の全結合層を作成し、MAT ファイル FCWeights.mat で重みとバイアスをそれぞれ Wb に設定します。

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]

  Show all properties

ここで、Weights プロパティおよび Bias プロパティには指定した値が含まれます。学習時に、これらのプロパティが空ではない場合、指定した値が初期の重みとバイアスとして使用されます。この場合、初期化子関数は使用されません。

詳細

すべて展開する

互換性の考慮事項

すべて展開する

R2019a での動作変更

参照

[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, pp. 249-256. 2010.

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification." In Proceedings of the IEEE international conference on computer vision, pp. 1026-1034. 2015.

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks." arXiv preprint arXiv:1312.6120 (2013).

R2016a で導入