在討論卷積核的時候,是不把channel維加進去的
核 = 乙個可以滑動的視窗
視窗內不同位置資料之間的權值共享
3d卷積,卷積核會在3個方向上運動,那麼卷積核的運動需要有三個自由度(一小塊立方體,在乙個大麵包塊內3個方向上滑動
2d卷積,卷積核只在2個方向上運動,因此只有兩個自由度(一小片紙,在一大張紙內2個方向上滑動
1d卷積,卷積核只在1個方向上運動,因此只有乙個自由度(一條滑窗,在一大長線上1個方向上滑動
乙個卷積核運算一次 得到乙個輸出值
以上討論了單個卷積核,接下來考慮多通道,乙個卷積核對應乙個通道
多通道同一位置,同時平行計算(矩陣運算
cxhxw
2d卷積hw方向滑動內積:
輸入:多通道2d map(藍色)
過程:拼接各kernel內積結果
輸出:單通道(綠色)
txhxw取某一通道為例:
3d卷積hwt方向滑動內積
輸入:多時間3d cube(藍色)
過程:拼接各kernel內積結果
輸出:多時間3d cube(綠色)
下圖是c3d**中配圖(b)
2d卷積情況下,此文第一張圖 橘色塊到綠色片的轉化,上圖為過程演示
3d卷積情況下,不畫**釋了,就是多個維度相同的cube疊加到同乙個cube,2d時的紙片看作切片麵包
先說乙個 1x1 卷積,不屬於卷積分解
如果我們要做5x5卷積,先在之前加乙個1x1卷積 用於降維/通道(1x1卷積核個數《輸入通道數 即可實現低成本降維/通道)
原本一步操作分成2步操作,有分解那味了
// 假設
input feature maps:28×28 channel:256
1x1 convolutional layer:1x1 channel:16
5x5 convolutional layer:5x5 channel:32
// 僅一步32個5x5卷積
卷積核參數量 = 256x5x5x32 = 201800
// 兩步:5x5 卷積之前經過了 1x1 卷積
輸入的 size 為 28x28x256 經過 1x1 卷積後 size 為 28x28x16 (通道數256降低至16)
再5x5卷積
卷積核參數量 = 256x1x1x16 + 16x5x5x32 = 16896
同理,1x1卷積核個數》輸入通道數,即可公升維度
q:是否損失資訊?
a:理論模糊(跨通道資訊互動啦耦合解耦通道資訊啦不損失解析度啦),實驗結果說明並沒有損失很多資訊,最大好處減少參數量~
1個二維卷積核分解為2個一維卷積核點積
比起卷積,空間可分離卷積要執行的矩陣乘法運算也更少。假設我們現在在 m x m 卷積核、卷積步長=1 、填充=0 的 n x n 影象上做卷積。傳統的卷積需要進行 (n-2) x (n-2) x m x m 次乘法運算,而空間可分離卷積只需要進行 n x (n-2) x m + (n-2) x (n-2) x m = (2n-2) x (n-2) x m 次乘法運算2d卷積的 多通道輸出,不add,而進行stack
上一步stack後的多通道輸出,通過乙個"1x1x通道數"的卷積核計算,乙個核輸出乙個通道
肉眼可見參數量的大大縮小
3x3x3x128 -> 3x3x3 + 1x1x3x128
另一篇解釋:k_t x k x k --> 1x k x k (saptial, depthwise) + k_t x 1 x 1(temporal, pointwise)
channel-separated convolutional networks
下圖是csn **配圖:卷積(chanel合併),組卷積(組內channel合併),depthwise卷積(channel不合併)
分解channel
chw為輸入:
一文搞定聯合索引
聯合索引 上文講解了索引的底層結構,但是留了乙個尾巴,就是沒有去講復合索引。今天來繼續梳理復合索引,所謂復合索引即是由多個字段組成的一條索引。例如下表 create table test id int 4 notnull auto increment a varchar 10 not null b ...
一文搞定babel轉換
code轉換為ast 遍歷ast樹 進行修改 還原為code targets支援哪些瀏覽器 babel polyfill是將整個es2015 環境引入到全域性中,會造成全域性汙染require core js modules set 改變了原型,所以可以在例項上使用方法 通過配置usebuiltin...
一文搞定開發學習環境
剛開始學寫 首先要搭建開發環境。新手需要在網上查閱教程,很多時候會遇到各種問題,甚至導致自己的學習進度卡住,學習熱情也因此而減少,這實在是個讓人煩的事情。我們可以簡單分析原因,並慢慢減少此類問題的發生。搭建開發環境經常出錯的原因 1.開發環境不匹配 我們在學習或者實際的開發中,有多種開發平台,比如w...