首页 > 编程知识 正文

卷积层详解,卷积计算层

时间:2023-05-05 16:20:58 阅读:181968 作者:3637

这是符合CC 4.0 BY-SA版权合同的博主的原创文章。 请附上原文出处的链接和本声明。 正文链接: https://blog.csdn.net/tjlakewalker/article/details/83275322本系列文章为深度学习笔记,便于自己阅读。

卷积计算概要在图像识别中,卷积神经网络的效果优于胡子百合连接神经网络。 第一次接触卷积的时候,我隐约记得大学一年级课上提到过的事情,但具体说不上来。 我知道什么是卷积,这个回答“如何通俗易懂地解释卷积”做了详细的说明。 为了便于阅读,抽出部分如下。

'从数学上看,卷积是一种运算。 (f*g ) ) n )称为f,g的卷积,其连续的定义是

那个离散的定义是

' '

我关于以上的定义,存在两个函数f(x )和g ) x ),其卷积运算(f * g ) n )意味着将f ) x ) g ) y )那样的积相加(连续积分,离散地求和)

在卷积神经网络中,卷积运算是对两个矩阵进行的。 如下图所示,左侧为输入矩阵m,中央为滤波器f (也称为卷积核),f以一定的步长在m上移动,进行点积运算,即可得到右侧的输出矩阵o。 这是卷积神经网络中卷积层最基础的运算。 实际操作有几个附加操作,后面将详细介绍。

图为convolutionalneuralnetworks-basics

输入层在利用卷积神经网络进行图像识别时,作为变换后的图像数据输入。 宽度w、高度h和深度d的图像表示为h*w*d。 这里,深度是图像用于存储各个像素的比特数。例如在彩色图像中,一个像素中有RGB的三个分量,其深度是3。

从数学上看,h*w*d的图像是d个h*w的矩阵。 例如,在6x16x3的图像中,有3个6x16的矩阵对应。 在大多数运用中,输入图像的尺寸h和w一般相等。

滤波器(卷积核)在卷积运算时,给出一个大小为F*F的方阵,称为滤波器,也称为卷积核,该矩阵的大小也称为感受野。 因为滤波器的深度d和输入层的深度d一致,所以可以得到F*F*d大小的滤波器,在数学上是d个F*F的矩阵。 在实际操作中,不同的模型决定了不同数量的过滤器。 其数量表示为k,每个k包含d个F*F的矩阵,通过计算生成输出矩阵。

将某些附加参数添加到固定大小的输入和固定大小的过滤器后,将生成确定大小的输出矩阵。 对这些参数进行说明。

在进行1)Padding。卷积运算情况下,输入矩阵的边缘比矩阵内部的要素计算次数少,输出矩阵的大小在卷积运算中比输入小. 因此,可以在输入矩阵的周围填充零,称为padding,其大小为p。 例如,在P=1情况下,原始5*5的矩阵如下,在蓝框中为原始矩阵,周围使用0作为padding。

2 )在进行卷积运算时,滤波器在输入矩阵上移动,进行点积运算。 记为移动的步骤stride,s。 如果S=2,则过滤器每次移动2个单位。 如下图所示,红框是第一步的计算,蓝框是S=2时的第二步的运算。

有以上两个参数p和s,而且参数w (输入矩阵的大小)、滤波器的大小f、输出矩阵的大小

对于5x5的输入矩阵,滤波器大小F=3、P=1、S=1,并且输出矩阵的大小为[5-32]/11=5。 可以看到,在步骤s为1,进行了P=1的padding之后,输出矩阵的大小与输入一致。

假设输入有多个深度。 如果输入为5x5x3,P=1,并且有k个滤波器,则每个滤波器为3x3x3。 此处,将所输入的3个7x7矩阵(对5x5进行padding获得的7x7 )标记为M1、M2、M3、第k个滤波器) 0kK )的3个3x3矩阵命名为F1、F2、F3,输出的第k个矩阵) 0kK ) 卷积运算对输入矩阵M1和滤波器F1、M2和F2、M3和F3进行卷积运算。 卷积运算的详细步骤如下

1 .在m-1中,从左上角开始,取感知野大小F*F的部分矩阵,与f-1进行点积运算,即乘以对应的位置要素,总和得到结果O11。

2. M2和F2进行相同的运算,得到结果O22; M3和F3得到O33。

3 .加上3. O11 O22 O33,再加上偏移量b0,得到输出矩阵Ok左上角的第一个元素。

4 .按照步骤s,从M1、M2、M3获取另一个感受区大小的区域,对应于F1、F2、F3进行步骤1~3的计算,最终得到完整的输出矩阵Ok

5 .更换滤波器k 1,重复1~4的运算,得到k个输出矩阵。

总结以上过程,输出矩阵的各元素是对应滤波器不同深度的矩阵作用于对应深度输入矩阵的不同位置,进行点积运算,加上偏移bias。

斯坦福大学的卷积神经网络课程有一个典型的例子。 这里分析两个步骤。 完整的示例请参考以下链接。

http://cs231n.github

.io/convolutional-networks/

在这个例子中,输入矩阵为5*5*3,即W=5,填充P为1,过滤器有K=2个,每个过滤器的大小为3*3*3,即F=3,同时设定计算步长S=2。这样可得到输出中单个矩阵的大小为(5-3+2*1)/2+1=3,由于K=2,所以输出的3*3矩阵有2个。下面为具体的计算过程

1. 首先从输入矩阵的最左边开始取得3*3的感受野,每一个深度的输入矩阵对应每一个深度的过滤器,进行点积运算,然后加上偏移Bias,得到第一个输出矩阵的第一个元素。详细过程为

输入矩阵1:r1 = 0*0+0*1+0*1+0*(-1)+1*0+0*0+0*1+0*0+1*0=0

输入矩阵2:r2 = 0*0+0*0+0*0+0*1+0*0+0*1+0*0+2*0+0*0 = 0

输入矩阵3:r3 = 0*(-1)+0*(-1)+0*0+0*0+0*0+2*(-1)+0*(-1)+0*0+2*0 = -2

输出矩阵元素(绿框中元素)O11 = r1+r2+r3+b0 = -1

2) 然后将感受野在3个输入矩阵上同时移动2个步长,如蓝框所示,重复1)中描述的运算,得到O12=-1,计算过程此处不再赘述。

3)将感受野在输入矩阵中依次移动,当完成第一个输出矩阵的计算后,使用第二个过滤器再重复一次,得到第二个输出矩阵。卷积计算完成。

在上面的计算中,每一个深度上的输入矩阵,其每一个步长的计算都是用同一个过滤器矩阵,这个现象被称为参数共享(parameter sharing)。其实这是一种简化,在未简化的情况下,同一深度矩阵上每一个步长的卷积计算,都需要使用不同的过滤器,这样会造成神经网络中参数过多,所以在实际操作中,会采取如上所述的参数共享策略,减少参数个数。

到此,卷积神经网络卷积层的计算理论部分已经说完。下面一篇文章将从开发的角度,详细分析下,在实际的计算中,具体的数据结构和计算方法。

参考文献:

1. Convolutional Neural Networks (CNNs / ConvNets) 

2. Convolutional Neural Networks - Basics

3. 如何通俗易懂地解释卷积

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。