# 卷積計算 Feature Map 大小心得 * 以下把: * input size 都叫做 image size * filter (或kernel) 都叫 filter * 所以變數有 4 個: * Image size * Filter size * Padding * Stride ## 發現計算可以拆成 3 個步驟: * ### 1. 先算 Padding * image 會變大成 `image size + 2 * padding` * 舉例: * image size 5x5, pading 2 * image 就變成 = 5 + 2\*2 = 9 * image size 變成 9x9 * ### <text style=background:yellow>下面計算 image 要使用 padding 過的</text> * ### 2. 再算 Stride * filter 相當於變大成 `filter + (strid - 1)` * 舉例: * filter size 3x3, stride 3 * filter 就變成 = 3 + (3-1) = 5 * filter size 變成 5x5 * ### <text style=background:yellow>下面計算 filter 要使用 stride 過的</text> * ### 3. 最後算 Filter * `filter size = 1` * image size 不變 * 因為 filter 的中心點就是 filter 全部大小 * `filter size > 1` * image size 要減去 (filter size - 1) * 因為 filter 的中心點旁邊還有位置,第1步會把中心點往右推,最後一步需要把中心點往左推 * 所以: * image 5x5, filter 2x2 * Conv 第一步就變成 `5 - (2-1) = 4` * feature map 就是 4x4 * image 5x5, filter 3x3 * Conv 第一步就變成 `5 - (3-1) = 3` * feature map 就是 3x3 * ![](https://i.imgur.com/fY7i6Zt.png) ## ★ 所以,若要輸入輸出一樣大小 ### `(filter - 1) 要等於 (2 * padding)` * 例如: * filter 3x3, padding 1 * (3-1) == 1\*2 ## 總結本次心得的公式 (Python): > 本人數學不敏感,python比較熟 ```python= image = 5 filter = 3 padding = 1 stride = 1 new_image = (image + 2 * padding) # new_image = 5 + 2 * 1 = 7 new_filter = (filter + (stride - 1) # new_filter = 3 + (1 - 1) = 3 feature = new_image - (new_filter - 1) # feature = 7 - (3 - 1) = 5 # feature size = 5x5 ``` # 學藝不精,歡迎幫忙糾正,感恩~~