maxPooling2dLayer
最大プーリング層
説明
2 次元最大プーリング層は、入力を矩形のプーリング領域に分割し、各領域の最大値を計算することによって、ダウンサンプリングを実行します。
作成
説明
は、1 つ以上の名前と値の引数を使用して、オプションのプロパティを設定します。layer = maxPooling2dLayer(poolSize,Name=Value)
入力引数
プーリング領域の次元。2 つの正の整数のベクトル [h w] として指定します。h は高さ、w は幅です。層を作成する場合、poolSize をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize は、プーリング領域の次元 poolSize より小さくなければなりません。
例: [2 1] は、高さが 2、幅が 1 のプーリング領域を指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: maxPooling2dLayer(2,Stride=3) は、プール サイズが [2 2]、ストライドが [3 3] の最大プーリング層を作成します。
入力を垂直方向および水平方向に走査するステップ サイズ。2 つの正の整数のベクトル [a b] として指定します。a は垂直方向のステップ サイズ、b は水平方向のステップ サイズです。層を作成する場合、Stride をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize は、プーリング領域の次元 PoolSize より小さくなければなりません。
例: [2 3] は、垂直方向のステップ サイズとして 2、水平方向のステップ サイズとして 3 を指定します。
入力の端のパディング。次のいずれかの値として指定します。
"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 の場合) 出力サイズが入力サイズと同じになるようにパディングを追加します。
逆プーリング層への出力のフラグ。true または false として指定します。
HasUnpoolingOutputs の値が false に等しい場合、最大プーリング層には 'out' という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs の値を true に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
"indices"— プールされた各領域の最大値のインデックス。"size"— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer を参照してください。
プロパティ
最大プーリング
プーリング領域の次元。2 つの正の整数のベクトル [h w] として指定します。h は高さ、w は幅です。層を作成する場合、PoolSize をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize は、プーリング領域の次元 PoolSize より小さくなければなりません。
例: [2 1] は、高さが 2、幅が 1 のプーリング領域を指定します。
入力を垂直方向および水平方向に走査するステップ サイズ。2 つの正の整数のベクトル [a b] として指定します。a は垂直方向のステップ サイズ、b は水平方向のステップ サイズです。層を作成する場合、Stride をスカラーとして指定して、両方の次元に同じ値を使用できます。
ストライドの次元 Stride がそれぞれのプーリングの次元より小さい場合、プーリング領域が重なります。
パディングの次元 PaddingSize は、プーリング領域の次元 PoolSize より小さくなければなりません。
例: [2 3] は、垂直方向のステップ サイズとして 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 列のパディングを追加します。
逆プーリング層への出力のフラグ。true または false として指定します。
HasUnpoolingOutputs の値が false に等しい場合、最大プーリング層には 'out' という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs の値を true に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
"indices"— プールされた各領域の最大値のインデックス。"size"— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer を参照してください。
層
この プロパティ は読み取り専用です。
層への入力の数。1 として格納されます。この層は単一の入力のみを受け入れます。
データ型: double
この プロパティ は読み取り専用です。
入力名。{'in'} として格納されます。この層は単一の入力のみを受け入れます。
データ型: cell
層の出力の数。
HasUnpoolingOutputs の値が false に等しい場合、最大プーリング層には 'out' という名前の 1 つの出力があります。
最大プーリング層の出力を最大逆プーリング層への入力として使用するには、HasUnpoolingOutputs の値を true に設定します。この場合、最大プーリング層には、最大逆プーリング層に結合できる 2 つの追加の出力があります。
"indices"— プールされた各領域の最大値のインデックス。"size"— 入力の特徴マップのサイズ。
最大逆プーリング層への出力を有効にするには、最大プーリング層のプーリング領域が重なっていてはなりません。
最大プーリング層の出力を逆プーリングする方法の詳細は、maxUnpooling2dLayer を参照してください。
データ型: double
層の出力名。
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 =
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 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 =
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 3×2 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 つの空間次元内のピクセル、ならびにチャネルと観測値に対応する 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" (未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
| 入力形式 | 出力形式 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HasUnpoolingOutputs プロパティが 1 (true) の場合、層の "size" 出力は形式が整っていない dlarray オブジェクトを出力します。 (R2024b 以降)
R2024b より前: 層の "size" 出力は数値配列を出力します。
参照
[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.
拡張機能
使用上の注意および制限:
コード生成では、指定なし (U) の次元をもつ
dlarrayオブジェクトをこの層に渡すことはサポートされていません。カーネル ウィンドウの非対角要素に沿って等しい最大値が存在する場合、
maxPooling2dLayerの実装の違いにより、MATLAB® と生成コードの間にわずかな数値の不一致が生じる可能性があります。この問題により、プールされた各領域の最大値のインデックスにおいて不一致が生じる可能性もあります。たとえば、
maxPooling2dLayerへの次の入力について考えます。MATLAB からの出力は以下のようになります。
同じ入力に対して、生成コードからの出力は以下のようになります。

使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同じ制限が適用されます。
バージョン履歴
R2016a で導入HasUnpoolingOutputs プロパティが 1 (true) の場合、層の "size" 出力は形式が整っていない dlarray オブジェクトを出力します。以前のバージョンでは、層の "size" 出力は数値配列を出力しました。
多くの場合、動作に変更はなく、コードを更新する必要はありません。出力が数値配列であることに依存するコードがある場合、dlarray オブジェクトから数値データを抽出するために、extractdata 関数を使用します。
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)