卷積運算是利用卷積核對影象中的每個畫素進行的操作,卷積核實用來做影象處理時的矩陣,影象處理時也稱為掩模,是與原影象做運算的引數。卷積核通常是乙個四方形的網格結構(例如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 表示是由亮向暗過渡,下面這個圖左邊暗...