maxPooling2dLayer
最大プーリング層
説明
2 次元最大プーリング層は、入力を矩形のプーリング領域に分割し、各領域の最大値を計算することによって、ダウンサンプリングを実行します。
作成
説明
は、最大プーリング層を作成し、layer
= maxPooling2dLayer(poolSize
)PoolSize
プロパティを設定します。
は、名前と値のペアを使用して、オプションの layer
= maxPooling2dLayer(poolSize
,Name,Value
)Stride
、Name
、および HasUnpoolingOutputs
の各プロパティを設定します。入力パディングを指定するには、名前と値のペアの引数 'Padding'
を使用します。たとえば、maxPooling2dLayer(2,'Stride',3)
は、プール サイズが [2 2]
、ストライドが [3 3]
の最大プーリング層を作成します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。
入力引数
コンマ区切りの名前と値のペアの引数を使用して、層の入力の端に沿って追加するパディングのサイズを指定し、Stride
、Name
、および HasUnpoolingOutputs
の各プロパティを設定します。名前を一重引用符で囲みます。
例: maxPooling2dLayer(2,'Stride',3)
は、プール サイズが [2 2]
、ストライドが [3 3]
の最大プーリング層を作成します。
Padding
— 入力の端のパディング
[0 0 0 0]
(既定値) | 非負の整数のベクトル | 'same'
入力の端のパディング。'Padding'
と、次の値のいずれかから成るコンマ区切りのペアとして指定します。
'same'
— ストライドが 1 である場合、出力サイズが入力サイズと同じになるように、学習時または予測時にサイズが計算されたパディングを追加します。ストライドが 1 より大きい場合、出力サイズはceil(inputSize/stride)
になります。ここで、inputSize
は入力の高さまたは幅、stride
は対応する次元のストライドです。可能な場合、上下および左右に同じ量のパディングが追加されます。垂直方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは下に追加されます。水平方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは右に追加されます。非負の整数
p
— サイズp
のパディングを入力のすべての端に追加します。非負の整数のベクトル
[a b]
— サイズa
のパディングを入力の上下に追加し、サイズb
のパディングを左右に追加します。非負の整数のベクトル
[t b l r]
— サイズがt
、b
、l
、r
のパディングを、それぞれ入力の上、下、左、右に追加します。
例: 'Padding',1
は、入力の上下に 1 行のパディングを追加し、入力の左右に 1 列のパディングを追加します。
例: 'Padding','same'
は、(ストライドが 1 の場合) 出力サイズが入力サイズと同じになるようにパディングを追加します。
プロパティ
最大プーリング
PoolSize
— プーリング領域の次元
2 つの正の整数のベクトル
プーリング領域の次元。2 つの正の整数のベクトル [h w]
として指定します。h
は高さ、w
は幅です。層を作成する場合、PoolSize
をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride
がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize
は、プーリング領域の次元 PoolSize
より小さくなければなりません。
例: [2 1]
は、高さが 2、幅が 1 のプーリング領域を指定します。
Stride
— 入力を走査するステップ サイズ
[1 1]
(既定値) | 2 つの正の整数のベクトル
入力を垂直方向および水平方向に走査するステップ サイズ。2 つの正の整数のベクトル [a b]
として指定します。a
は垂直方向のステップ サイズ、b
は水平方向のステップ サイズです。層を作成する場合、Stride
をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride
がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize
は、プーリング領域の次元 PoolSize
より小さくなければなりません。
例: [2 3]
は、垂直方向のステップ サイズとして 2、水平方向のステップ サイズとして 3 を指定します。
PaddingSize
— パディングのサイズ
[0 0 0 0]
(既定値) | 4 つの非負の整数のベクトル
入力の境界に適用するパディングのサイズ。4 つの非負の整数のベクトル [t b l r]
として指定します。t
は上に適用されるパディング、b
は下に適用されるパディング、l
は左に適用されるパディング、r
は右に適用されるパディングです。
層の作成時に、名前と値のペアの引数 'Padding'
を使用してパディングのサイズを指定します。
例: [1 1 2 2]
は、入力の上下に 1 行のパディングを追加し、入力の左右に 2 列のパディングを追加します。
PaddingMode
— パディングのサイズを決定するメソッド
'manual'
(既定値) | 'same'
パディングのサイズを決定するメソッド。'manual'
または 'same'
として指定します。
PaddingMode
の値は、層の作成時に指定した 'Padding'
値に基づいて自動的に設定されます。
'Padding'
オプションをスカラーまたは非負の整数のベクトルに設定した場合、PaddingMode
は'manual'
に自動的に設定されます。'Padding'
オプションを'same'
に設定した場合、PaddingMode
が'same'
に自動的に設定されます。ストライドが 1 である場合、出力サイズが入力サイズと同じになるように、学習時にパディングのサイズが計算されます。ストライドが 1 より大きい場合、出力サイズはceil(inputSize/stride)
になります。ここで、inputSize
は入力の高さまたは幅、stride
は対応する次元のストライドです。可能な場合、上下および左右に同じ量のパディングが追加されます。垂直方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは下に追加されます。水平方向に追加しなければならないパディングの値が奇数の場合、余ったパディングは右に追加されます。
Padding
— パディングのサイズ
[0 0]
(既定値) | 2 つの非負の整数のベクトル
メモ
Padding
プロパティは将来のリリースで削除される予定です。代わりに PaddingSize
を使用してください。層の作成時に、名前と値のペアの引数 'Padding'
を使用してパディングのサイズを指定します。
入力の境界に垂直方向および水平方向に適用するパディングのサイズ。2 つの非負の整数のベクトル [a b]
として指定します。a
は入力データの上下に適用されるパディング、b
は左右に適用されるパディングです。
例: [1 1]
は、入力の上下に 1 行のパディングを追加し、入力の左右に 1 列のパディングを追加します。
HasUnpoolingOutputs
— 逆プーリング層への出力のフラグ
false
(既定値) | true
逆プーリング層への出力のフラグ。true
または false
として指定します。
HasUnpoolingOutputs
の値が false
に等しい場合、最大プーリング層には 'out'
という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs
の値を true
に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
'indices'
— プールされた各領域の最大値のインデックス。'size'
— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer
を参照してください。
層
NumInputs
— 入力の数
1
(既定値)
この プロパティ は読み取り専用です。
層への入力の数。1
として返されます。この層は単一の入力のみを受け入れます。
データ型: double
InputNames
— 入力名
{'in'}
(既定値)
この プロパティ は読み取り専用です。
入力名。{'in'}
として返されます。この層は単一の入力のみを受け入れます。
データ型: cell
NumOutputs
— 出力の数
1 (既定値) | 3
層の出力の数。
HasUnpoolingOutputs
の値が false
に等しい場合、最大プーリング層には 'out'
という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs
の値を true
に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
'indices'
— プールされた各領域の最大値のインデックス。'size'
— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer
を参照してください。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値) | {'out','indices','size'}
層の出力名。
HasUnpoolingOutputs
の値が false
に等しい場合、最大プーリング層には 'out'
という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs
の値を true
に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
'indices'
— プールされた各領域の最大値のインデックス。'size'
— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer
を参照してください。
データ型: cell
例
プーリング領域が重なっていない最大プーリング層の作成
プーリング領域が重なっていない最大プーリング層を作成します。
layer = maxPooling2dLayer(2,'Stride',2)
layer = MaxPooling2DLayer with properties: Name: '' HasUnpoolingOutputs: 0 NumOutputs: 1 OutputNames: {'out'} Hyperparameters PoolSize: [2 2] Stride: [2 2] PaddingMode: 'manual' PaddingSize: [0 0 0 0]
矩形領域の高さと幅 (プール サイズ) はどちらも 2 です。イメージを垂直方向および水平方向に走査するステップ サイズ (ストライド) も [2 2]
であるため、プーリング領域は重なりません。
Layer
配列に領域が重なっていない最大プーリング層を含めます。
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer]
layers = 6x1 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
プーリング領域が重なっている最大プーリング層の作成
プーリング領域が重なっている最大プーリング層を作成します。
layer = maxPooling2dLayer([3 2],Stride=2)
layer = MaxPooling2DLayer with properties: Name: '' HasUnpoolingOutputs: 0 NumOutputs: 1 OutputNames: {'out'} Hyperparameters PoolSize: [3 2] Stride: [2 2] PaddingMode: 'manual' PaddingSize: [0 0 0 0]
この層は、サイズ [3 2] のプーリング領域を作成し、各領域の 6 つの要素の最大値を取ります。それぞれのプーリングの次元 PoolSize
より小さいストライドの次元 Stride
があるため、プーリング領域が重なります。
Layer
配列にプーリング領域が重なっている最大プーリング層を含めます。
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer([3 2],Stride=2)
fullyConnectedLayer(10)
softmaxLayer]
layers = 6x1 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 3x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax
アルゴリズム
2 次元最大プーリング層
2 次元最大プーリング層は、入力を矩形のプーリング領域に分割し、各領域の最大値を計算することによって、ダウンサンプリングを実行します。
層がプーリングを行う次元は、層の入力によって次のように異なります。
2 次元イメージ入力 (2 つの空間次元内のピクセル、ならびにチャネルと観測値に対応する 4 次元のデータ) の場合、層は空間次元でプーリングします。
2 次元イメージ シーケンス入力 (2 つの空間次元内のピクセル、ならびにチャネルと観測値とタイム ステップに対応する 5 次元のデータ) の場合、層は 2 つの空間次元でプーリングします。
1 次元イメージ シーケンス入力 (1 つの空間次元内のピクセル、ならびにチャネルと観測値とタイム ステップに対応する 4 次元のデータ) の場合、層は空間次元と時間次元でプーリングします。
層の入力形式と出力形式
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(空間、空間、チャネル、バッチ) という形式で表されます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、MaxPooling2DLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false
) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参照
[1] Nagi, J., F. Ducatelle, G. A. Di Caro, D. Ciresan, U. Meier, A. Giusti, F. Nagi, J. Schmidhuber, L. M. Gambardella. ''Max-Pooling Convolutional Neural Networks for Vision-based Hand Gesture Recognition''. IEEE International Conference on Signal and Image Processing Applications (ICSIPA2011), 2011.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
カーネル ウィンドウの非対角要素に沿って等しい最大値が存在する場合、maxPooling2dLayer
の実装の違いにより、MATLAB® と生成コードの間にわずかな数値の不一致が生じる可能性があります。この問題により、プールされた各領域の最大値のインデックスにおいて不一致が生じる可能性もあります。
たとえば、maxPooling2dLayer
への次の入力について考えます。MATLAB からの出力は以下のようになります。
同じ入力に対して、生成コードからの出力は以下のようになります。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
カーネル ウィンドウの非対角要素に沿って等しい最大値が存在する場合、maxPooling2dLayer
の実装の違いにより、MATLAB と生成コードの間にわずかな数値の不一致が生じる可能性があります。この問題により、プールされた各領域の最大値のインデックスにおいて不一致が生じる可能性もあります。
たとえば、maxPooling2dLayer
への次の入力について考えます。MATLAB からの出力は以下のようになります。
同じ入力に対して、生成コードからの出力は以下のようになります。
バージョン履歴
R2016a で導入
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)