卷積操作轉化成矩陣乘法


參考:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/

平常都是無腦使用Pytorch提供的nn.Conv2d方法,但是並不關心具體該如何實現,原來是把卷積操作轉化成矩陣乘法,而不是真的通過滑動卷積核來做卷積,下面做具體介紹。

首先看一下下面的示意圖,左邊是輸入圖像,右邊是卷積核(為方便說明,只用了一個卷積核)。

image.png

下面是用這個卷積核對輸入圖像做卷積操作,最后得到一個2維的平面

image.png

由下圖可以看到卷積操作其實就是把輸入圖像划分成若干個塊(patch),每個塊的維度和卷積核保持一致(這里暫時忽略stride,padding的影響)。然后我們可以把每個3維的patch展開成一維向量,然后拼接起來得到一個二維矩陣。

image.png

因為每個patch都是和相同的卷積核做卷積,那么我們也可以同樣把卷積核展開成以為向量。下圖中右邊的卷積核矩陣表示多個卷積核拼湊的結果。

image.png

完整的轉化過程可看下圖:




微信公眾號:AutoML機器學習
MARSGGBO原創
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com



2019-12-20 17:17:07




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM