1. 程式人生 > >卷積、池化後的影象大小計算(附例子)

卷積、池化後的影象大小計算(附例子)

用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)