假设数据矩阵D如下3*3大小,是单通道的,我们首先需要补0将它扩充到(3+2*(floor(3/2)))* (3+2*(floor(3/2))) = 5*5大小的矩阵操作如下:
![](http://upload-images.jianshu.io/upload_images/2917770-ce8a4850f6b1c7fe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
补0操作
接下需要将D_pad_zero与卷积核kernel做卷积运算,kernel size =3,pad = 1,stride =1,则可得出输出(3+2*1-3)/1+1 = 3;下图只是给出了一个卷积核,一个卷积核生成一个特征图(feature map),而在实际应用中,为了增强卷积层的表示能力,会使用很多个卷积核从而得到多个特征图。
![](http://upload-images.jianshu.io/upload_images/2917770-1eb972ff35472a07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/569)
卷积
从上图不同颜色框框给出,从数据矩阵中依次提取出和卷积核一样大小的块数据,这里其实就是开篇所说的局部连接。为了提高该操作运算效率,需要进行im2col操作,即把这些不同颜色框框内的数据向量化,总共有3*3个向量,最后得到9*9这样的数据矩阵,具体操作如下
![](http://upload-images.jianshu.io/upload_images/2917770-5f05993f96fbfe25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
im2col
接下来就是矩阵相乘操作,具体操作如下:
![](http://upload-images.jianshu.io/upload_images/2917770-e27316d757d53b77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
矩阵相乘
上述矩阵相乘结果如下,最好还需要col2im,把向量转换成矩阵形式。
![](http://upload-images.jianshu.io/upload_images/2917770-e5ffa2aa705e02e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
col2im
上述整个过程只是使用一个卷积核,实际应用中,卷积核有很多,只要把这些卷积核按行排列,再做kernel*D_im2col操作,会一次得出所有的feature map。