tf.nn.conv2d中stride對輸出的影響

之前一直以爲只要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之間存在倍數關係。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章