前置:
- 影響shape形狀的因素:
- 1.卷積核大小
- 2.stride步長
- 3.padding模式
公式:
- K – 卷積核數量
- F – 卷積核大小
- S – 步長
- P – 外圍填充的層數
運用
- 顯然valid模式下,直接卷,不夠就丟棄
我推導的valid模式下的計算方式(以 W 舉例):
W2 = (W1 - F)/S + 1
- SAME模式
- 如何確定P
- 利用公式1計算出output理論上的形狀,再利用公式2反推 P
公式1
公式2
- 注意了這裏P可以不是整數哦,比如計算P=1.5的話也是正常的
如果補充的padding個數爲偶數會在兩側補充相同個數個0,如果padding爲奇數2n+1,會在左側補n個0,右側補n+1個0
- 注意了這裏P可以不是整數哦,比如計算P=1.5的話也是正常的
- 利用公式1計算出output理論上的形狀,再利用公式2反推 P
- 如何確定P
5×5的圖像
3×3的卷積核
步長 2
padding SAME
import tensorflow as tf
import numpy as np
pic = tf.constant(value=np.ones((5, 5), dtype=np.float32), shape=(1,5,5,1))
W = tf.constant(value=np.ones((3, 3), dtype=np.float32), shape=(3,3,1,1))
output = tf.nn.conv2d(pic, W, strides=[1, 2, 2, 1], padding='SAME')
with tf.Session() as sess:
print(output.eval().shape)
"""
運行結果:
(1, 3, 3, 1)
"""
總結
- 判斷輸出張量shape的形狀
參考
深度學習基礎–卷積計算和池化計算公式
理解CNN卷積層與池化層計算
tensorflow中卷積方式SAME和VALID特徵圖大小計算