卷积层

来源:互联网 发布:重庆seo网站推广 编辑:程序博客网 时间:2024/05/13 13:18

卷积神经网络是在BP神经网络的改进,与BP类似,都采用了前向传播计算输出值,反向传播调整权重和偏置;CNN与标准的BP最大的不同是:CNN中相邻层之间的神经单元并不是全连接,而是部分连接,也就是某个神经单元的感知区域来自于上层的部分神经单元,而不是像BP那样与所有的神经单元相连接。CNN的有三个重要的思想架构:

  • 局部区域感知
  • 权重共享
  • 空间或时间上的采样

公式参考《Notes on Convolutional Neural Networks》。

1.卷积层前向计算

上面的*号实质是让卷积核k在第l-1层所有关联的feature maps上做卷积运算,然后求和,再加上一个偏置参数,取sigmoid得到最终激励值的过程。

假设第l-1层只有两个feature map,大小为4*4像素,一个卷积核K(二维卷积核K11和K12),大小为2*2,则计算第l层的一个feature map结果如下,大小为3*3像素。

 

(在计算前要把卷积核旋转180°)第一步在python中的代码实现如下。

复制代码
    def conv(self,a, v, full=0):  # valid:0  full:1        ah, aw = np.shape(a)        vh, vw = np.shape(v)        if full:            temp = np.zeros((ah + 2 * vh - 2, aw + 2 * vw - 2))            temp[vh - 1:vh - 1 + ah, vw - 1:vw - 1 + aw] = a            a = temp            ah, aw = np.shape(a)        k = [[np.sum(np.multiply(a[i:i+vh,j:j+vw],v))              for j in range(aw - vw + 1)] for i in range(ah - vh + 1)]        return k
复制代码

 

2.卷积层的残差计算

 

其中第l层为卷积层,第l+1层为subsampling层,subsampling层与卷积层是一一对应的。其中up(x)是将第l+1层的大小扩展为和第l层大小一样。

○指点乘,对应numpy.multiply。

假如第l+1层为2*2的,subsampling的采样大小为2*2,其中第l+1层的一个feature map所对应的残差为:

 

那么扩展之后就变为了

 实现代码如下。

    def up(self,a,n):        b=np.ones((n,n))        return np.kron(a,b)

 

3.卷积层的梯度计算

 

 

 如卷积层为3*3的大小,卷积核的大小为2*2上一层feature map大小为4*4。

 

实际等于convolve2d(xl-1,delta)。

 

4.subsampling层前向计算

 

这里的down(x)是将x中采样大小中像素值进行采样操作,如求和、最大值。

 

5.subsampling层残差计算(假设下一层为卷积层)

 

对于下图中第l-1层值为6的元素,根据卷积层前向计算的过程,与第l层的关联运算如下。

 故根据bp算法中残差计算方法等于第l层与其连接的所有结点的权值和残差的加权和再乘以该点对z的导数值,相当于用旋转180度的卷积核直接在下一层卷积层的残差上做卷积运算,方式为full类型。

 

 

6.subsampling层梯度计算(假设下一层为卷积层)



原创粉丝点击