卷积神经网络是一种常用的深度学习模型,通常用作图像处理方面的任务,如人脸识别、目标识别等。
本文整理了卷积操作、特征图、卷积核的可训练参数等。
卷积动画
解释:其中前三个维度(3*3*3)代表一个卷积核参数,2代表2个核心。(3,3,3)的含义是(w,h,channel),其中channel代表输入的通道数。(3*3*3*2)的含义是(w,h,channel_in,channel_out)。channel_out表示进行卷积运算新生成“图像”的通道数。
卷积的作用是二维滤波,起到特征提取的作用。
卷积输出的结果,可以直接作为下一层卷积的输入,因此卷积生成结果被叫做“特征图”。
本文用了动画实现卷积的方式,用了矩阵哈达玛积,结果求和,再遍历通道。代码如下:
temp +=
np.sum(padding_array[i*2:i*2+3,j*2:j*2+3,channel]*w_0[:,:,channel])
完整代码https://github.com/birdskyws/conv
当编写完上面的代码,我就发现实现卷积的代码有问题,优先求哈达玛积 应转化为 矩阵相乘,将二维矩阵转换为一维矩阵。
(1,n)*(n,1)->(1,1)
遍历通道的相加,也转化为一维矩阵。
Sum{(3,3,3)*(3,3,3)}->(1,27)*(27,1)
通过实际编写代码,卷积操作也是矩阵乘法,相比较全连接网络,仅仅是减少了可训练参数。(对比全连接网络实现手写数字识别。)
单层卷积,可训练参数个数:
本文用最简单的方法实现了卷积操作,并有做优化,写死padding、stride等参数,但是通过编写代码,充分理解了卷积操作。特别希望对卷积不理解的同学,也尝试编写实验代码,一定会对卷积的含义有更深理解。