卷积神经网络系列(2)

来源于油管视频
stride
我们一般把滑动的步长成为stride,将原始尺寸为77的应用步长为2的33的filter后,每次都会向右移动两格再做卷积,移动两次之后发现右边没有可以继续提取的信息了,再从最开始的位置向下滑动两格之后再按照向右滑动的顺序提取特征,最终得到33的一个特征图。
一般来说,stride越小越好,因为在filter滑动过程中是在对原始信息进行特征提取,我们希望能够尽可能保留原始图像的更多信息,这样的得到的特征图也会更大。但是考虑到时间效率,stride=1一般不常用。还有,stride不能太大以至于漏掉原始信息,比如在这个7
7的尺寸下,如果stride=4,当提取完左上角的信息后,直接滑动到右上角,漏掉了中间一列的信息。因此,在实际应用过程中,stride的选择要综合考虑,谨慎选择。
pad
可以在上面看到本图片最上面有一项是pad=1,那么为什么要加这一项,以及有何意义呢?
因为我们原始图像的尺寸其实是55的(黄色框),当我们用33的stride=2的filter去提取特征时,发现在左上角(红色框)的①号位置信息被提取到,②号位置的信息也被提取到,当filter滑动到右上角(绿色框)时,②号位置的信息再次被利用到。由于提取信息的次数越多,对结果的影响越大,而对于所有的边缘信息来说,我们提取的次数少于其他的内部信息,因此,我们就在原始图像最外层填补了一圈0,这时候边缘信息也能够被多次利用到。
pad
那么为什么填充的数字必须是0呢?
因为加入的一圈并不是原始的图像信息,只是起到帮助边缘信息提取特征的作用,如果加上具体的数字,卷积的时候就会对特征图产生影响,提取出来不是原始图像的信息,对结果产生干扰。
如何来计算输出尺寸的大小呢?
对于输出的宽width和高hight来说,有共同的一个公式:
Output=(input-filter+2pad)/stride+1
Output——输出的尺寸(宽、高)
Input——输入的尺寸(宽、高)
Filter——过滤器的尺寸
stride——步长
那么可以计算图片中的输出尺寸为o=(7-3+2)/1+1=7,这里假定stride=1,输出的尺寸是和输入的尺寸一样的。
神经元参数
对于全连接网络来说,每一个神经元都有很多的参数需要学习,如果按照全连接的方式,且输出尺寸是32
32的,那么参数一共有3232=1024个参数,输入的filter的尺寸是553=75,那么整个需要75102510个参数,对于神经网络来说学习起来很费时间。
但是卷积网络有一个参数共享的设置,即filter中的参数有5
53+1=76个参数(还有1个偏置b)一共有10个filter,那么只需要学习760个参数就够了,大大降低了运算时间。
池化
一般,我们的pooling是对特征图做的操作,比如现在我们的特征图是224
22464的,pooling就是要对特征图进行特征浓缩。也是在特征图上选择一个区域,这个区域中不再包含参数,一共有两种池化的方式:mean和max,mean就是对框之中的数值求均值,max就是对框之中的数值求最大值。在这个例子中,我们通过池化操作,将宽和高都压缩了1/2,那么体积变成了原来的1/4,大大浓缩了特征信息。pooling也被称之为下采样。池化层没有权重参数。
max pooling
在进行pooling时,也需要指定一些参数,这里用到的filter是2
2,stride=2,那么对44的特征图进行max pooling,在每个区域上求最大值之后就变成了22尺寸的。
整体的网络
每一层卷积之后需要加上一个非线性的激活函数,这里的激活函数用的是非整流线性单元Relu,两次卷积之后加上一个pooling,然后再进行两次卷积,和pooling,再重复一次。这个过程就是不断地对原始图像的特征进行提取,最后得到的结果与全连接层相连,相当于把特征拿出来了,然后再进行分类等任务。

猜你喜欢

转载自blog.csdn.net/weixin_44987948/article/details/109153982
今日推荐