之前一直以爲只要padding=’SAME’,那麼卷積之後輸出的尺寸就和輸入相同。其實不是,就算是’SAME’,步長stride也會對輸出產生影響的。因爲平時我們的步長一般爲1,所以對結果並沒有什麼影響,但是一旦步長不爲1,輸出尺寸將不再與輸入相同。
import tensorflow as tf
data=tf.Variable(tf.random_normal([64,48,48,3]),dtype=tf.float32)
weight=tf.Variable(tf.random_normal([5,5,3,64]),dtype=tf.float32)
sess=tf.InteractiveSession()
tf.global_variables_initializer().run()
conv1=tf.nn.conv2d(data,weight,strides=[1,1,1,1],padding='SAME')
conv2=tf.nn.conv2d(data,weight,strides=[1,2,2,1],padding='SAME')
conv3=tf.nn.conv2d(data,weight,strides=[1,4,4,1],padding='SAME')
print(conv1)
print(conv2)
print(conv3)
結果分別是:
Tensor("Conv2D_6:0", shape=(64, 48, 48, 64), dtype=float32)
Tensor("Conv2D_7:0", shape=(64, 24, 24, 64), dtype=float32)
Tensor("Conv2D_8:0", shape=(64, 12, 12, 64), dtype=float32)
可以看出,卷積時輸出尺寸的大小和stride之間存在倍數關係。