卷积神经网络的计算

卷积的概念

卷积的概念:卷积可以认为是一种有效提取图像特征的方法。一般会用一个正方形的卷积核(过滤器),按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长, 卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点,如下图所示。

二维矩阵中:6x6的输入通过3x3的卷积核得到输出4x4的特征矩阵
卷积神经网络的计算_第1张图片

二维卷积过程的计算

先计算二维卷积

输出长度计算

Valid卷积(变小)
 输出长度 =   n − f + 1   \ 输出长度 = \ n-f+1 \,  输出长度= nf+1
n为输入矩阵长度,f为卷积核长度,这是在没有填充和和步长为0的基础上计算的输出长度
以上图的输入为例:6-3+1=4

填充(padding)

上述过程中会存在一定的问题,如下图所示,绿框代表的特征在被卷积的过程中只会被利用一次,与紫框差别就很大。那么就会导致边缘信息输出少,丢失图像的边缘位置。解决的办法就是使用填充(padding)。
卷积神经网络的计算_第2张图片
在 Tensorflow 框架中,用参数 padding = ‘SAME’或 padding = ‘VALID’表示是否进行全 零填充,其对输出特征尺寸大小的影响如下:

SAME(全零填充):
填充长度是可以自己选定的。填充后卷积长度不变。加入填充P后输出的长度为:
 输出长度 =   n + 2 p − f + 1   \ 输出长度 = \ n+2p-f+1 \,  输出长度= n+2pf+1
若要使得输出长度等于输入长度,p=(f-1)/2
以p=1为例
卷积神经网络的计算_第3张图片
我们可以看出,p=1时输出正好等于输入,输入扩充为8x8(以0填充)

加入步长(Strided)

 输出长度 = n + 2 p − f + 1 s + 1   \ 输出长度 = \frac{n+2p-f+1}{s}+1 \,  输出长度=sn+2pf+1+1
s为步长stride

Full反卷积(变大)

膨胀卷积:增加感受野(Receptive Field)
卷积在卷积,能够看到更大的东西
卷积神经网络的计算_第4张图片

输出的内容

乘积累加
卷积神经网络的计算_第5张图片
p=0,s=2
输出长度=(6+0-3+1/2)+1
2x3+3x4+7x4+6x1+6x0+9x2+3x-1+4x0+8x3=91

  1. List item

你可能感兴趣的:(深度学习之pytorch,cnn,深度学习,神经网络)