1. ホーム
  2. python

[解決済み] tensorflowのtf.nn.max_poolのパディングの'SAME'と'VALID'の違いは何ですか?

2022-03-26 11:24:59

質問

のパディングが「SAME」と「VALID」の違いは何ですか? tf.nn.max_pooltensorflow ?

私の考えでは、'VALID'は、max poolを行うときに、エッジの外側にゼロパディングがないことを意味します。

によると ディープラーニングのためのコンボリューション演算の手引き の'VALID'を使うだけで、プール演算子でのパディングは発生しないと書いてあります。 tensorflow . しかし、最大プールの「SAME」パディングは何ですか? tensorflow ?

解決方法は?

わかりやすくするために、例を挙げて説明します。

  • x 形状[2, 3]の入力画像, 1チャンネル
  • valid_pad 2x2 カーネル、ストライド 2、VALID パディングの max プール.
  • same_pad : 2x2 カーネル、ストライド 2、SAME パディングの最大プール (これは クラシック の方法)

出力される形状は

  • valid_pad ここでは、パディングがないため、出力形状は [1, 1] となります。
  • same_pad : ここでは、画像を [2, 4] の形状になるようにパッドしています ( -inf で、max pool を適用する) ので、出力形状は [1, 2] となります。

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

valid_pad.get_shape() == [1, 1, 1, 1]  # valid_pad is [5.]
same_pad.get_shape() == [1, 1, 2, 1]   # same_pad is  [5., 6.]