多輸入輸出通道

通道數 channel,這個確實是大家通常回去仔細設的超參數。





我感覺沐神想說的就是下面的說法,一個多通道的卷積核大小可以是\((k_h,k_w,input_{channel},output_{channel})\)
怎么理解呢?\((k_h,k_w)\)就很好理解了,input_channel就和卷積核的通道數是一樣的,沐神說的三維卷積核就是這個,就是輸入的通道有幾維,那么這個三維卷積核的通道就有幾維。
還有就是最后一個output_channel,這個和三維卷積核的個數有關,就是說要x個輸出通道,那么就有x個三維卷積核。(輸出通道的數量是人工設定的)




多輸出通道(多個三維卷積核):可以認為每個通道都在識別特定模式。
多輸入通道:將多通道輸出進行加權相加,得到一個組合的模式識別。比如說A通道識別的貓頭,B通道識別的胡須.... 最后希望在高層將這些識別的特征進行組合, 最終能夠正常識別出一只貓

\(1*1\)卷積融合不同通道的數據,可以把\(1*1\)卷積就認為是一個全連接(加權組合),比如上面的channel從3變成了2,chanell數減少了,但是信息進行了融合。
因為使用了最小窗口,1×11×1 卷積失去了卷積層的特有能力——在高度和寬度維度上,識別相鄰元素間相互作用的能力。 其實 1×11×1 卷積的唯一計算發生在通道上。


當然沐神的說法是可以說為了得到(mh,mw),需要多少的計算量。
卷積要存的參數,現對於MLP是少很多的,但是卷積的計算量也並不小,但是卷積的模型存儲是不大的。
上面大概估算了一下計算開銷,ImageNet的樣本就是100w,單掃一次是14min,那么反向運算再來14min,也就是一個epoch就要28min。那么就算訓練100個epoch吧 ,大概也是需要30個小時。

代碼實現

QA
- 全卷積能解決輸入大小變化的情況,有什么方法能解決channel動態變化的情況嗎?只能下采樣?
這個問題沒太看懂。
輸入和輸出不變的情況下,通常是不會去動這個通道數的。
如果把輸入和輸出的高寬都減半的情況下,輸出通道數要翻倍。意思就是把空間信息壓縮了,然后把這些壓縮的信息,更多在通道中存儲下來。下采樣后通道拓寬一倍。
- 關於多輸出通道數量是如何控制呢?
輸出通道的數量是人為控制的,然后輸出通道的數目和三維卷積核的數量是一樣的,因為一個三維卷積核的卷積結果就是一條輸出通道。
也就是說,你設計幾條輸出通道,你就要設計多少個三維卷積核。
- 網絡越深,padding 0 越多,這里是否會影響性能?
計算性能會稍微有點影響,但是模型性能是不會影響的。
- 每個通道的卷積核都不一樣嗎?同一層不同通道的卷積核大小必須一樣嗎?
每個通道的卷積核是不一樣的,不同通道的卷積核大小是一致的。
你可選擇不同大小的卷積核,GoogLeNet就是這么用的,如果大小不一致的話,要寫成兩個卷積操作。不同通道保持核的大下一致,這是出於方便計算的角度考慮。
- 計算卷積時,bias的有無,對結果影響大嗎?bias的作用怎么解釋?
其實bias的作用就是當數據偏離均值的時候,bias就是那個偏離均值的負數。
但是實際上我們會做大量的均勻化的操作,所以bias實際來說沒有那么大的影響,但是其實bias對計算性能其實並沒什么影響,所以加上還是可以的。
- 核的參數怎么選?
注意,卷積核的參數是學出來的,不是選出來的。
- 老師,如果是一個rgb圖像,加上深度圖,相當於輸入是四個通道,做卷積是和rgb三通道同樣做法嗎?
不是的,這個深度信息是另外一個維度,這里要用到conv3-d,我們講的對圖片圖例都是conv-2d。
- 卷積能獲取位置信息嗎?感覺卷積就是把網絡信息提取出來便於函數擬合。
卷積是可以有位置信息的,卷積是對位置非常敏感的,(i,j)那個位置,就對應了原圖(i,j)周圍的那一塊。
我們后面會講如何通過池化層,讓卷積對位置信息不要那么敏感。
- 關於編譯器的選擇?
沐神說他是沒有用PyCharm,使用的是jupyter和vs code
