caffe學習 卷積計算

2021-08-14 13:22:14 字數 2064 閱讀 4158

在caffe中如何計算卷積的?

caffe中, 卷積網路的前向傳播過程需要計算類似w∗

x+b 這樣的連線, forward_cpu_gemm()函式用weight矩陣和輸入的bottom相乘, 然後對bias進行處理, bias程式會根據情況決定是否對bias進行scale(放大/縮小).

另外可以參考知乎問題:在 caffe 中如何計算卷積?

我們知道, caffe中的卷積運算採用的是矩陣計算, 那麼caffe是如何構造卷積矩陣的.

我們可以參考下圖:

具體的**參考:high performance convolutional neural networks for document processing

由圖可知, 傳統的卷積方式與矩陣計算方式的卷積運算的區別, 後者通過預先轉換, 得到輸入資料與卷積核的矩陣形式, 然後進行一次矩陣運算就能得到多個卷積核的特徵圖.

我們假設

輸入資料input_features:w∗

h∗d , 其中d是資料深度, w∗

h 是資料大小

卷積核conv_filter:kw

∗kh∗

d∗m , 其中k∗

k 是核大小, d是核深度, m是核數量

卷積超引數:stride是卷積步長, sw

表示寬度方向的步長, sh

表示高度方向的步長.

卷積超引數:pad是卷積填充操作, pa

dw代表寬度方向上的填充,長度 pa

dh代表高度方向上的填充長度.

第一步, 先將input_features按照配置的卷積方式來轉換成矩陣, 也就是圖中input_features->input_features(matrix)的過程.那麼新的input_features(matrix): in

putf

eatu

res(

matr

ix)=

ofs×

(kw∗

kh∗d

) input_features(matrix)是乙個二維矩陣, 其中ofs代表的是output_features_size, ofs由輸入資料的大小w∗

h 和卷積核大小kw

∗kh 共同確定. of

s=[w

−kw+

2∗pa

dwsw

+1]×

[h−k

h+2∗

padh

sh+1

] 第二步, 將卷積核轉換成矩陣形式, 由conv_filters kw

∗kh∗

∗d∗m

四維轉換成conv_filters(matrix) (k

w∗kh

∗d)∗

m 二維格式.

第三步, 進行矩陣運算 ou

tput

feat

ures

(mat

rix)

=inp

ut_f

eatu

res(

matr

ix)×

conv

_fea

ture

s(ma

trix

)=×=

ofs×

m=(w

−kw+

2∗pa

dwsw

+1)×

(h−k

h+2p

adhs

h+1)

最後將output_features(matrix)轉換成output_features ou

tput

_fea

ture

s(ma

trix

)→ou

tput

feat

ures

=(w−

kw+2

∗pad

wsw+

1)∗(

h−kh

+2pa

dhsh

+1)∗

m

Caffe的卷積原理

caffe中的卷積計算是將卷積核矩陣和輸入影象矩陣變換為兩個大的矩陣a與b,然後a與b進行矩陣相乘得到結果c 利用gpu進行矩陣相乘的高效性 三個矩陣的說明如下 1 在矩陣a中 m為卷積核個數,k k k,等於卷積核大小,即第乙個矩陣每行為乙個卷積核向量 是將二維的卷積核轉化為一維 總共有m行,表示...

caffe中的卷積

如上,將三維的操作轉換到二維上面去做,然後呼叫gemm庫進行矩陣間的運算得到最後結果。兩個矩陣相乘,需要中間的那個維度相同,這個相同的維度就是c k k,其中c是feature map的維度,k為卷積核的邊長。按照卷積核在feature map上面滑窗的順序將其展開成二維的。在三維上面看,就是卷積核...

caffe原始碼 卷積層

input 3 5 5 c h w pading 1 步長 2 卷積核 2 3 3 3 n c k k output 2 3 3 c h w 如下圖所示 首先需要理解caffe裡面的im2col和col2im 然後 卷積層 其實和 全連線層 差不多了 input 3 4 4 c h w 卷積核 1 ...