http://cs231n.github.io/convolutional-networks/
卷积层其实是将输入的图片按照filter的size与stride分割成许多local regions,然后分别作卷积运算,得到新图片每个点的像素值。
假设输入图片为227*227*3,filter有96个,size为11*11*3,stride为4,那么卷积运算后生成的每张图片大小为(227-11)/4+1即55*55*3。其中每个像素点都是由filter与local regions作卷积得到的,也就是完成了由输入图片的local regions→输出图片的像素点的映射。
Matrix Multiplication实现卷积:
1.输入图片的每个loacl regions通过所谓的im2col操作被提取为一列,所以一共有55*55=3025列,11*11*3=363行,X_col(363*3025)
2.每个filter的weights成为一行,所以有96行,11*11*3=363列,W_row(96*363)
3.卷积结果即np.dot(W_row,X_col),size为96*3025,每行表示一个filter卷积所得图片
4.最后将其reshape为55*55*96