# 用 Python 計算 Receptive Scope (感受野) ![](https://i.imgur.com/E9gnORZ.png) * 以 Conv 3x3 為例 * Conv3 (3x3) 下一層每個 pixel 可以感受上一層 3x3 的範圍 * 反過來想,每個 pixel 往上一層都可以擴大 3x3 * 但是範圍會重疊,所以左右兩邊除以 2 * 擴大的幅度 = (卷積核(filter) 大小 - 1(中心位置)) / 2 * 例如 3x3,就是擴大 (3 - 1) / 2 = 1 * 那往上一層回推 Scope 範圍,就是加上 2 倍「擴大幅度」 * 例如經過 3x3 ,就是擴大 1 * 那下一層每 1 個 pixel 上一層 Scope 就是 * 1 + 2 \* 1 = 3 * 3x3 的範圍 * 再往上一層,還是擴大 1,再上一層 Scope 是 * 3 + 2 \* 1 = 5 * 5x5 的範圍 ## 單層算法 (python) ```python= # 當下 scope 大小 scope = 1 # 卷積核大小 filter_size = 3 # 上一層視野增加範圍 gain = (filter_size - 1) / 2 # 上一層視野 upper_scope = scope + 2 * gain # upper_scope = 1 + 2 * 1 = 3 ``` ## 多層算法 (python) ```python= # 起始 scope 大小 scope = 1 # 每一層卷積核大小 filter_size_layers = [ 3, 3 ] # 2 層 3x3 # 分層計算 for filter_size in filter_size_layers: # 上一層視野增加範圍 gain = (filter_size - 1) / 2 # 上一層視野 upper_scope = scope + 2 * gain # 第1層: upper_scope = 1 + 2 * 1 = 3 # 第2層: upper_scope = 3 + 2 * 1 = 5 # 結論「感受野」是 5x5 的 ``` ## ※ 上面只嘗試在 3x3 OK,2x2 有點問題 # 學藝不精,歡迎幫忙糾正,感恩~~