ドキュメンテーション

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

convolution2dLayer

説明

2 次元畳み込み層は、入力にスライディング畳み込みフィルターを適用します。この層では、入力に沿って垂直方向および水平方向にフィルターを移動させ、重みと入力のドット積を計算し、バイアス項を加算することによって、入力を畳み込みます。

作成

説明

layer = convolution2dLayer(filterSize,numFilters) は、2 次元畳み込み層を作成し、FilterSize プロパティおよび NumFilters プロパティを設定します。

layer = convolution2dLayer(filterSize,numFilters,Name,Value) は、名前と値のペアを使用して、オプションの StrideDilationFactorNumChannelsパラメーターと初期化学習率および正則化、および Name の各プロパティを設定します。入力パディングを指定するには、名前と値のペアの引数 'Padding' を使用します。たとえば、convolution2dLayer(11,96,'Stride',4,'Padding',1) は、サイズ [11 11] の 96 個のフィルター、[4 4] のストライド、層の入力のすべての端に沿ったサイズ 1 のゼロ パディングを持つ、2 次元畳み込み層を作成します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。

入力引数

すべて展開する

名前と値のペアの引数

コンマ区切りの名前と値のペアの引数を使用して、層の入力の端に沿って追加するゼロ パディングのサイズを指定するか、StrideDilationFactorNumChannelsパラメーターと初期化学習率および正則化、および Name の各プロパティを設定します。名前を一重引用符で囲みます。

例: convolution2dLayer(3,16,'Padding','same') は、サイズ [3 3] の 16 個のフィルターと 'same' パディングを持つ、2 次元畳み込み層を作成します。学習時に、層の出力サイズが入力サイズと同じになるように、ゼロ パディングのサイズが計算および設定されます。

入力の端のパディング。'Padding' と、次の値のいずれかから成るコンマ区切りのペアとして指定します。

  • 'same' — ストライドが 1 である場合、出力サイズが入力サイズと同じになるように、学習時または予測時にサイズが計算されたパディングを追加します。ストライドが 1 より大きい場合、出力サイズは ceil(inputSize/stride) になります。ここで、inputSize は入力の高さまたは幅、stride は対応する次元のストライドです。可能な場合、上下および左右に同じ量のパディングが追加されます。垂直方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは下に追加されます。水平方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは右に追加されます。

  • 非負の整数 p — サイズ p のパディングを入力のすべての端に追加します。

  • 非負の整数のベクトル [a b] — サイズ a のパディングを入力の上下に追加し、サイズ b のパディングを左右に追加します。

  • 非負の整数のベクトル [t b l r] — サイズが tblr のパディングを、それぞれ入力の上、下、左、右に追加します。

例: 'Padding',1 は、入力の上下に 1 行のパディングを追加し、入力の左右に 1 列のパディングを追加します。

例: 'Padding','same' は、(ストライドが 1 の場合) 出力サイズが入力サイズと同じになるようにパディングを追加します。

プロパティ

すべて展開する

畳み込み

フィルターの高さと幅。2 つの正の整数のベクトル [h w] として指定します。h は高さ、w は幅です。FilterSize は、入力でニューロンが結合する局所領域のサイズを定義します。

層を作成する場合、FilterSize をスカラーとして指定して、高さと幅に同じ値を使用できます。

例: [5 5] は、高さが 5、幅が 5 のフィルターを指定します。

フィルターの数。正の整数として指定します。この数値は、入力の同じ領域に結合する畳み込み層のニューロンの数に対応します。このパラメーターは、畳み込み層の出力のチャネル (特徴マップ) の数を決定します。

例: 96

入力を垂直方向および水平方向に走査するステップ サイズ。2 つの正の整数のベクトル [a b] として指定します。a は垂直方向のステップ サイズ、b は水平方向のステップ サイズです。層を作成する場合、Stride をスカラーとして指定して、両方のステップ サイズに同じ値を使用できます。

例: [2 3] は、垂直方向のステップ サイズとして 2、水平方向のステップ サイズとして 3 を指定します。

膨張畳み込み (Atrous 畳み込みとも呼ばれる) の係数。2 つの正の整数のベクトル [h w] として指定します。h は垂直方向の膨張、w は水平方向の膨張です。層を作成する場合、DilationFactor をスカラーとして指定して、水平方向と垂直方向の両方の膨張に同じ値を使用できます。

膨張畳み込みを使用して、パラメーターの数や計算量を増やさずに、層の受容野 (層で確認できる入力の領域) を増やすことができます。

各フィルター要素間にゼロを挿入すると、層のフィルターが拡張されます。膨張係数は、入力のサンプリングのステップ サイズ、またはこれと等価であるフィルターのアップサンプリング係数を決定します。これは、有効なフィルター サイズ (Filter Size – 1) .* Dilation Factor + 1 に相当します。たとえば、膨張係数 [2 2] の 3 行 3 列のフィルターは、要素間にゼロが挿入された 5 列 5 行のフィルターと等価です。

例: [2 3]

入力の境界に適用するパディングのサイズ。4 つの非負の整数のベクトル [t b l r] として指定します。t は上に適用されるパディング、b は下に適用されるパディング、l は左に適用されるパディング、r は右に適用されるパディングです。

層の作成時に、名前と値のペアの引数 'Padding' を使用してパディングのサイズを指定します。

例: [1 1 2 2] は、入力の上下に 1 行のパディングを追加し、入力の左右に 2 列のパディングを追加します。

パディングのサイズを決定するメソッド。'manual' または 'same' として指定します。

PaddingMode の値は、層の作成時に指定した 'Padding' 値に基づいて自動的に設定されます。

  • 'Padding' オプションをスカラーまたは非負の整数のベクトルに設定した場合、PaddingMode'manual' に自動的に設定されます。

  • 'Padding' オプションを 'same' に設定した場合、PaddingMode'same' に自動的に設定されます。ストライドが 1 である場合、出力サイズが入力サイズと同じになるように、学習時にパディングのサイズが計算されます。ストライドが 1 より大きい場合、出力サイズは ceil(inputSize/stride) になります。ここで、inputSize は入力の高さまたは幅、stride は対応する次元のストライドです。可能な場合、上下および左右に同じ量のパディングが追加されます。垂直方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは下に追加されます。水平方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは右に追加されます。

メモ

Padding プロパティは将来のリリースで削除される予定です。代わりに PaddingSize を使用してください。層の作成時に、名前と値のペアの引数 'Padding' を使用してパディングのサイズを指定します。

入力の境界に垂直方向および水平方向に適用するパディングのサイズ。2 つの非負の整数のベクトル [a b] として指定します。a は入力データの上下に適用されるパディング、b は左右に適用されるパディングです。

例: [1 1] は、入力の上下に 1 行のパディングを追加し、入力の左右に 1 列のパディングを追加します。

各フィルターのチャネルの数。'auto' または正の整数として指定します。

このパラメーターは、常に畳み込み層への入力のチャネル数に等しくなります。たとえば、入力がカラー イメージの場合、入力のチャネルの数は 3 です。現在の層の前にある畳み込み層のフィルターの数が 16 の場合、現在の層のチャネルの数は 16 です。

NumChannels'auto' の場合、学習時にチャネルの数が決定されます。

例: 256

パラメーターと初期化

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

  • 'glorot' – Glorot 初期化子 [4] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(numIn + numOut) の一様分布から個別にサンプリングを行います。ここで、numIn = FilterSize(1)*FilterSize(2)*NumChannels および numOut = FilterSize(1)*FilterSize(2)*NumFilters です。

  • 'he' – He 初期化子 [5] を使用して重みを初期化します。He 初期化子は、平均 0、分散 2/numIn の正規分布からサンプリングを行います。ここで、numIn = FilterSize(1)*FilterSize(2)*NumChannels です。

  • '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 プロパティによって指定された初期化子を使用します。

学習時、WeightsFilterSize(1) x FilterSize(2) x NumChannels x NumFilters の配列です。

データ型: single | double

畳み込み層のバイアス。数値配列として指定します。

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

学習時、Bias は 1 x 1 x NumFilters の配列です。

データ型: 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

すべて折りたたむ

96 個のフィルターを持ち、各フィルターの高さと幅が 11 の畳み込み層を作成します。水平方向と垂直方向のストライド (ステップ サイズ) に 4 を使用します。

layer = convolution2dLayer(11,96,'Stride',4)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [11 11]
       NumChannels: 'auto'
        NumFilters: 96
            Stride: [4 4]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]

   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 プロパティを使用します。

初期化関数の指定

32 個のフィルターを持ち、各フィルターの高さと幅が 5 の畳み込み層を作成し、重み初期化子を He 初期化子に指定します。

filterSize = 5;
numFilters = 32;
layer = convolution2dLayer(filterSize,numFilters, ...
    'WeightsInitializer','he')
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 'auto'
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

Weights プロパティおよび Bias プロパティは空になることに注意してください。学習時に、これらのプロパティは指定した初期化関数を使用して初期化されます。

カスタム初期化関数の指定

重みとバイアスの独自の初期化関数を指定するには、関数ハンドルに WeightsInitializer プロパティおよび BiasInitializer プロパティを設定します。これらのプロパティに、重みとバイアスのサイズを入力として取り、初期化値を出力する関数ハンドルを指定します。

32 個のフィルターを持ち、各フィルターの高さと幅が 5 の畳み込み層を作成し、標準偏差 0.0001 のガウス分布から重みとバイアスをサンプリングする初期化子を指定します。

filterSize = 5;
numFilters = 32;

layer = convolution2dLayer(filterSize,numFilters, ...
    'WeightsInitializer', @(sz) rand(sz) * 0.0001, ...
    'BiasInitializer', @(sz) rand(sz) * 0.0001)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 'auto'
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

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

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

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

filterSize = 5;
numFilters = 32;
load Conv2dWeights

layer = convolution2dLayer(filterSize,numFilters, ...
    'Weights',W, ...
    'Bias',b)
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [5 5]
       NumChannels: 3
        NumFilters: 32
            Stride: [1 1]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [0 0 0 0]

   Learnable Parameters
           Weights: [5x5x3x32 double]
              Bias: [1x1x32 double]

  Show all properties

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

入力のサイズが 28 x 28 x 1 であるとします。16 個のフィルターを持ち、各フィルターの高さが 6 で幅が 4 の畳み込み層を作成します。水平方向と垂直方向のストライドを 4 に設定します。

畳み込みが入力を完全にカバーすることを確認します。畳み込みが入力を完全にカバーするには、水平方向と垂直方向の両方の出力次元が整数でなければなりません。水平方向の出力次元を整数にするには、(28 – 6+ 2 * 1)/4 + 1 = 7 であるため、イメージの上下に 1 行のゼロ パディングが必要です。垂直方向の出力次元を整数にするには、(28 – 4+ 2 * 0)/4 + 1 = 7 であるため、ゼロ パディングは不要です。

畳み込み層を構築します。

layer = convolution2dLayer([6 4],16,'Stride',4,'Padding',[1 0])
layer = 
  Convolution2DLayer with properties:

              Name: ''

   Hyperparameters
        FilterSize: [6 4]
       NumChannels: 'auto'
        NumFilters: 16
            Stride: [4 4]
    DilationFactor: [1 1]
       PaddingMode: 'manual'
       PaddingSize: [1 1 0 0]

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

詳細

すべて展開する

互換性の考慮事項

すべて展開する

R2019a での動作変更

参照

[1] LeCun, Y., B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. "Handwritten Digit Recognition with a Back-Propagation Network." In Advances in Neural Information Processing Systems 2 (D. Touretzky, ed.). San Francisco: Morgan Kaufmann, 1990.

[2] LeCun, Y., L. Bottou, Y. Bengio, and P. Haffner. ''Gradient-Based Learning Applied to Document Recognition.'' Proceedings of the IEEE. Vol. 86, Number 11, 1998, pp. 2278–2324.

[3] Murphy, K. P. Machine Learning: A Probabilistic Perspective. Cambridge, MA: MIT Press, 2012.

[4] 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.

[5] 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.

R2016a で導入


[1] Image credit: Convolution arithmetic (License)