神經網路中的卷積運算解析

2021-08-03 04:45:22 字數 2137 閱讀 3527

卷積運算是利用卷積核對影象中的每個畫素進行的操作,卷積核實用來做影象處理時的矩陣,影象處理時也稱為掩模,是與原影象做運算的引數。卷積核通常是乙個四方形的網格結構(例如3*3的矩陣或畫素區域),該區域上每個方格都有乙個權重值。

使用卷積進行計算時,需要將卷積核的中心位置放置在要計算的畫素上,依次計算核中每個元素和其覆蓋的影象畫素值的乘積並求和,得到的結構就是該位置的新畫素值。

在卷積神經網路的計算中,通常為了提高運算效率,會分為兩步實現卷積運算:

(1)利用im2col將待卷積運算的(影象)矩陣重排;

(2)利用gemm實現具體計算;

為了直觀理解,可參考以下幾張:

(影象)矩陣各位置的特徵向量:

cout為濾波器個數,c為通道數,filter matrix乘以feature matrix的轉置,得到輸出矩陣cout x (h x w),就可以解釋為輸出的三維blob(cout x h x w)。

使用im2col的方法將卷積轉為矩陣相乘,例圖如下:

caffe中的計算原始碼,目前很多模型均採用這種方式計算卷積:

float im2col_get_pixel(float *im, int height, int width, int channels,

int row, int col, int channel, int pad)

//from berkeley vision's caffe!

//void im2col_cpu(float* data_im,

int channels, int height, int width,

int ksize, int stride, int pad, float* data_col)

} }}

//矩陣計算

void gemm(int ta, int tb, int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float beta,

float *c, int ldc)

void gemm_nn(int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float *c, int ldc)}}

}void gemm_nt(int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float *c, int ldc)

c[i*ldc+j] += sum;}}

}void gemm_tn(int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float *c, int ldc)}}}

void gemm_tt(int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float *c, int ldc)

c[i*ldc+j] += sum;}}}

void gemm_cpu(int ta, int tb, int m, int n, int k, float alpha,

float *a, int lda,

float *b, int ldb,

float beta,

float *c, int ldc)

}if(!ta && !tb)

gemm_nn(m, n, k, alpha,a,lda, b, ldb,c,ldc);

else if(ta && !tb)

gemm_tn(m, n, k, alpha,a,lda, b, ldb,c,ldc);

else if(!ta && tb)

gemm_nt(m, n, k, alpha,a,lda, b, ldb,c,ldc);

else

gemm_tt(m, n, k, alpha,a,lda, b, ldb,c,ldc);

}

卷積神經網路 有趣的卷積神經網路

一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...