の解説です。Maximum Pooling はある画像にフィルターをかける操作と考えることができます。
(実例:この場合は輪郭を強調)
縦の輪郭、横の輪郭、斜め線部分・・・と強調したい部分を変えることができます。
実際にはどのようなフィルターをかけるとその後にデータ処理がうまくいきやすいでしょうか?これの答えはたくさん考えられますが、実際のところフィルターは人間が設定するものではなく、分類の結果の誤差から逆算されます。
一応、コード部分の解説を行なっておくと、
TensorFlow を使って画像にプーリング処理を施し、その結果を Matplotlib を使って表示するコード
import tensorflow as tf
image_condense = tf.nn.pool(
input=image_detect, # image in the Detect step above
window_shape=(2, 2),
pooling_type='MAX',
# we'll see what these do in the next lesson!
strides=(2, 2),
padding='SAME',
)
plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image_condense))
plt.axis('off')
plt.show();
-
window_shape=(2, 2): プーリングウィンドウのサイズを (2, 2) (高さ2、幅2) に設定します。これは、2x2 の領域ごとに処理を行うことを意味します。
-
pooling_type='MAX': 最大値プーリング (Max Pooling) を宣言。これは、ウィンドウ内の最大値を出力として採用する方法です。他にも平均値プーリング (Average Pooling) などあります。
-
strides=(2, 2): ストライドを (2, 2) に設定。これは、ウィンドウを2ピクセルずつ縦横にずらしながら処理することを意味しています。
padding='SAME': パディングを "SAME" に設定。これは、出力のサイズが入力のサイズと (ストライドを考慮して) できるだけ近くなるように、入力の周囲にゼロパディングを追加するものです。一応その後の処理のためにつけています。
このtutirialでは最終的に畳み込みニューラルネットワーク (CNN) の実装を行います。 CNN では、畳み込み層とプーリング層を組み合わせて、画像の特徴を抽出し、分類などのタスクを実行します。ここでプーリング層の説明を行なっているわけですね。