這篇文章主要講解了如何實(shí)現(xiàn)Tensorflow卷積和手寫(xiě)python代碼實(shí)現(xiàn)卷積的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
從一個(gè)通道的圖片進(jìn)行卷積生成新的單通道圖的過(guò)程很容易理解,對(duì)于多個(gè)通道卷積后生成多個(gè)通道的圖理解起來(lái)有點(diǎn)抽象。本文以通俗易懂的方式講述卷積,并輔以圖片解釋,能快速理解卷積的實(shí)現(xiàn)原理。最后手寫(xiě)python代碼實(shí)現(xiàn)卷積過(guò)程,讓Tensorflow卷積在我們面前不再是黑箱子!
注意:
本文只針對(duì)batch_size=1,padding='SAME',stride=[1,1,1,1]進(jìn)行實(shí)驗(yàn)和解釋,其他如果不是這個(gè)參數(shù)設(shè)置,原理也是一樣。
1 Tensorflow卷積實(shí)現(xiàn)原理
先看一下卷積實(shí)現(xiàn)原理,對(duì)于in_c個(gè)通道的輸入圖,如果需要經(jīng)過(guò)卷積后輸出out_c個(gè)通道圖,那么總共需要in_c * out_c個(gè)卷積核參與運(yùn)算。參考下圖:
如上圖,輸入為[h:5,w:5,c:4],那么對(duì)應(yīng)輸出的每個(gè)通道,需要4個(gè)卷積核。上圖中,輸出為3個(gè)通道,所以總共需要3*4=12個(gè)卷積核。對(duì)于單個(gè)輸出通道中的每個(gè)點(diǎn),取值為對(duì)應(yīng)的一組4個(gè)不同的卷積核經(jīng)過(guò)卷積計(jì)算后的和。
接下來(lái),我們以輸入為2個(gè)通道寬高分別為5的輸入、3*3的卷積核、1個(gè)通道寬高分別為5的輸出,作為一個(gè)例子展開(kāi)。
2個(gè)通道,5*5的輸入定義如下:
#輸入,shape=[c,h,w] input_data=[ [[1,0,1,2,1], [0,2,1,0,1], [1,1,0,2,0], [2,2,1,1,0], [2,0,1,2,0]], [[2,0,2,1,1], [0,1,0,0,2], [1,0,0,2,1], [1,1,2,1,0], [1,0,1,1,1]], ]