机器学习13:卷积神经网络(CNN)

一、Why CNN for Image?

1、对于一幅图像来说,用DNN全连接的话,参数会很多,而图像实际上是有很多冗余的,有些地方的特征可能不需要。而CNN其实是拿掉了DNN的一些参数。

2、识别工作中,有时候并不需要看整张图,而只需要看部分位置如鸟嘴。不管鸟嘴出现在图像的哪个位置,只要用相同的神经元参数侦测到这个鸟嘴的存在,就可以判断这是一只鸟,因此,不同位置的鸟嘴的神经元可以共用同一组参数。

3、对于图像识别来说,通常下采样并不会影响你对图像中的物体进行识别,因此可以通过下采样将图片变小,从而减少参数:

二、CNN结构

图像识别的三个特征:1、某个重要特征只占图像的一小部分;2、同一个特征可能出现在不同的区域,而他们可以共用参数;3、下采样一般不会影响图像识别。特征1、2可以有卷积层处理,特征3由maxpooling处理。

三、卷积层操作

其实就是卷积核滑窗进行滤波,检测各个位置是否存在跟卷积核具有相同特点的部分。当具有相同特点时,当前位置输出值一般较大,例如图中左上角和左下角的3.一个filter滑窗检测下来得到4*4的矩阵。选择不同的filter重复操作得到多个4*4矩阵。

CNN的卷积层实际上是将DNN的一层拿掉部分weight之后的结果。使得能够用较少的参数获得好的效果。

如图所示,对于每一次卷积,图像的9个像素作为输入,卷积核相当于weight,然后输出到一个神经元“3”,这里,“3”这个神经元只与第一层的9个神经元连接,权重直接由卷积核决定。以此类推,每移动一次卷积核,另外九个像素与另外一个神经元连接对于同一个卷积核滑窗连接到的神经元,它们的weight都相同(称为共享weight,因为weight就是卷积核)。

四、Max Pooling层操作

Max Pooling比较简单,就是将卷积层的输出按均匀大小进行分块,每块取最大值组成新的矩阵,进一步将矩阵变小。

最终,例子中的6*6的图像输出得到2*2的图像,但是,由于采用不同的filter,每个fitler都输出一个2*2的图像,设有n个filter,则得到n维2*2的图像。可以认为有n个通道。

五、Flatten

将输出得到的n维矩阵进行拉直得到一个列矩阵,输入到全连接层。其实就是把每个像素当作一个神经元进行输入。

六、训练示例

1、对于一幅图片,如果图片是灰度的(如手写数字),图片尺寸是28*28,那么输入类型就是input_shape=(1,28,28);如果是RGB图像,则图像输入包含三个通道,为input_shape=(3,28,28).

2、第一层卷积中,Convolution2D的前三个参数为25,3,3,表示使用了25个filter(卷积核),卷积核的大小是3*3,那么每一个卷积核就有9个参数,25个核总共有225个参数。

3、对于第一层卷积的输出,得到25个26*26的图片,即每个filter输出一个一幅图,这里图片的个数我们也称为深度。

4、通过池化操作,得到25*13*13,即25个13*13的图片。

5、再进行第二层卷积操作,这个时候,卷积核是个立体的,每幅图片都有一个3*3的卷积核,那么每次卷积操作都包含25*3*3=225个参数。图中第二层卷积使用了50个卷积核,那么总共下来的参数是50*25*3*3=11250个参数。说直接点,就是对第一层输出的25张图片的每一张都进行了50*3*3的卷积操作,那么25张图片都操作一次参数也是25*50*3*3.第二层卷积之后的输出是25*50个11*11的图片(PS:感觉ppt中的输出存在问题,如果是50*11*11,那么应该是50个立体的11*11,立体的深度是25)

七、CNN学习到什么?

1、卷积层学习

学习过程中,对于每个filter,将其输出的矩阵元素相加,使其最大化,那么就算出了filter的参数。

下图是采用上述方法得到的一组filter,表示的是原始图像出现filter图像特征的地方比较多。

2、full connect层学习

最大化该层的输出和,得到图中的一些特征图。代表的是全连接层学习到的特征。

3、输出层

同样最大化每一个neural的输出值,得到如图的输出图,显然,人眼看不出图片是手写数字,极有可能随便拿一张图,网络就给判断成某个数字了。

输出的图像与实际数字完全不符合,这里,我们利用实际图像的已知信息,加入正则化项,如:手写数字占整个图像的像素较小,那么可以减去像素值,表示求得输出信息最大化的同时,像素值最小化(使得像素值较小)。如图所示。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值