ドキュメンテーション

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

convolution2dLayer

説明

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

作成

構文

layer = convolution2dLayer(filterSize,numFilters)
layer = convolution2dLayer(filterSize,numFilters,Name,Value)

説明

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

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

入力引数

すべて展開する

名前と値のペアの引数

コンマ区切りの名前と値のペアの引数を使用して、層の入力の端に沿って追加するゼロ パディングのサイズを指定するか、StrideDilationFactorNumChannelsWeightLearnRateFactorBiasLearnRateFactorWeightL2FactorBiasL2Factor、および 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

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

データ型: char | string

畳み込み層の重み。FilterSize(1) x FilterSize(2) x NumChannels x NumFilters の配列として指定します。

名前と値のペアの引数を使用してこのプロパティを設定することはできません。

データ型: single | double

畳み込み層の層のバイアス。1 x 1 x NumFilters の配列として指定します。

名前と値のペアの引数を使用してこのプロパティを設定することはできません。

データ型: single | double

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

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

例: 2

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

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

例: 2

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

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

例: 2

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

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

例: 2

すべて折りたたむ

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

32 個のフィルターを持ち、各フィルターの高さと幅が 5 の畳み込み層を作成します。入力イメージの境界に沿ってサイズが 2 のパディングを指定します。バイアスの学習率係数を 2 に設定します。重みを標準偏差 0.0001 のガウス分布から手動で初期化します。

layer = convolution2dLayer(5,32,'Padding',2,'BiasLearnRateFactor',2)
layer = 
  Convolution2DLayer with properties:

              Name: ''

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

   Learnable Parameters
           Weights: []
              Bias: []

  Show all properties

入力にカラー イメージが含まれるとします。重みを標準偏差 0.0001 のガウス分布から手動で初期化します。

layer.Weights = randn([5 5 3 32]) * 0.0001;

層の局所領域のサイズは 5 x 5 です。各領域のカラー チャネルの数は 3 です。特徴マップの数は 32 (フィルターの数) です。そのため、層には 5*5*3*32 の重みがあります。

randn([5 5 3 32]) は、平均 0、標準偏差 1 のガウス分布からの値による 5 x 5 x 3 x 32 の配列を返します。これらの値に 0.0001 を乗算することによってガウス分布の標準偏差が 0.0001 に設定されます。

同様に、バイアスを平均 1、標準偏差 0.00001 のガウス分布から初期化します。

layer.Bias = randn([1 1 32])*0.00001 + 1;

この例には 32 の特徴マップがあるため、バイアスの数は 32 です。randn([1 1 32]) は、平均 0、標準偏差 1 のガウス分布からの値による 1 x 1 x 32 の配列を返します。これらの値に 0.00001 を乗算することによって、値の標準偏差が 0.00001 に設定され、1 を加算することによってガウス分布の平均が 1 に設定されます。

入力のサイズが 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

詳細

すべて展開する

参照

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

R2016a で導入


[1] Image credit: Convolution arithmetic (License)