卷積、池化後的影象大小計算(附例子)
阿新 • • 發佈:2019-01-02
用CNN網路進行圖片處理,就會遇到卷積、池化後的影象大小問題,一般搜到的答案是這樣的:
對於初學者,看到這個公式的唯一疑問是:P值到底是多少?
在Tensoflow中,Padding有2個選型,'SAME'和'VALID' ,下面舉例說明差別:
如果 Padding='SAME',輸出尺寸為: W / S
import tensorflow as tf input_image = tf.layers.Input(shape=[32, 32, 3], dtype=tf.float32) conv0 = tf.layers.conv2d(input_image, 64, kernel_size=[3, 3], strides=[2, 2], padding='same') # 32/2=16 conv1 = tf.layers.conv2d(input_image, 64, kernel_size=[5, 5], strides=[2, 2], padding='same') # kernel_szie不影響輸出尺寸 print(conv0) # shape=(?, 16, 16, 64) print(conv1) # shape=(?, 16, 16, 64)
如果 Padding='VALID',輸出尺寸為:(W - F + 1) / S
import tensorflow as tf input_image = tf.layers.Input(shape=[32, 32, 3], dtype=tf.float32) conv0 = tf.layers.conv2d(input_image, 64, kernel_size=[3, 3], strides=[2, 2], padding='valid') # (32-3+1)/2=15 conv1 = tf.layers.conv2d(input_image, 64, kernel_size=[5, 5], strides=[2, 2], padding='valid') # (32-5+1)/2=14 print(conv0) # shape=shape=(?, 15, 15, 64) print(conv1) # shape=(?, 14, 14, 64)