卷积神经网络
不知道什么是卷积神经网络?没关系,大家应该用过淘宝的拍立淘吧,根据你照片识别出相似的商品,原理中就用到了卷积神经网络。它能根据你的一张图片提取特征,从而识别物体。当然卷积神经网络不仅在图像识别大有作为,接下来进入正题,揭开卷积神经网络的面纱。
why convolution?
1.参数相比神经网络这样的全连接少太多了!有效地避免了过拟合。
2.具有平移不变性,提取特征能力很强
卷积神经网络分为:卷积,池化,全连接这三个主要的部分。
1.卷积操作
先来个简单的,请仔细看图
我们选择一张6*6*1(1为通道数,这里是1)的图像,让它和3*3的卷积核进行卷积操作,最后得出4*4*1的一张图像。
input image | filter | stride | output image |
6*6*1 | 3*3*1 | 1 | 4*4*1 |
Q1:-5怎么得到的?
如上图,对应元素依次内积,最后相加。
Q2:怎么得到卷积后的图像?
1.1 填充(padding)
- 保持图像不会变得太小
- 保留图像边缘信息
将图像边缘围上一圈,p=1
input image | padding | filter | stride | output image |
6*6*1 | 1 | 3*3*1 | 1 | 6*6*1 |
1.2 步长(stride)
相当于等差数列中的公差,从左到右从上至下依次走stride个步长。
举例
一个filter
现实生活中图像的通道都不是一个的,这里我们采用一张RGB(彩色图片)这里我们采用了一个filter(卷积核),输出了图像的一个特征,如垂直特征
input image | padding | filter | stride | output image |
6*6*3 | 0 | 3*3*3 | 1 | 4*4*1 |
两个filter
两个卷积核,输出了两个特征
input image(h*w*c) | padding | filter(h*w*c) | stride | output image |
6*6*3 | 0 | 3*3*3 | 1 | 4*4*2 |
| 3*3*3 | 1 |
卷积层
现在使用多个卷积层对数据进行训练
卷积操作完成后进行全连接,当成神经网络处理就可以啦。
input image(h*w*c) | padding | filter(n*h*w*c) | stride | output image |
39*39*3 | 0 | 10*3*3*3 | 1 | 37*37*10 |
37*37*10 | 0 | 20*5*5*10 | 2 | 17*17*20 |
17*17*20 | 0 | 40*5*5*20 | 2 | 7*7*40 |
2.池化操作
why pooling?
- 提取部分图像的最大特征
- 池化分为max pooling和average pooling
2.1 Max pooling
我们取图像对应卷积大小位置的局部最大值
input image(h*w*c) | padding | filter(h*w*c) | stride | output image |
4*4*1 | 0 | 2*2*1 | 2 | 2*2*1 |
2.2 Average pooling
我们取图像对应卷积大小 位置的平均值
input image(h*w*c) | padding | filter(h*w*c) | stride | output image |
4*4*1 | 0 | 2*2*1 | 2 | 2*2*1 |
3.完整的卷积神经网络
input image(h*w*c) | padding | filter(n*h*w*c) | stride | output image |
32*32*3 | 0 | conv1 6*5*5*3 | 1 | 28*28*6 |
28*28*6 | 0 | max pooling 1*2*2*6 | 2 | 14*14*6 |
14*14*6 | 0 | conv2 16*5*5*6 | 1 | 10*10*16 |
10*10*16 | 0 | max pooling 2*2*16 | 2 | 5*5*16 |
总结:
参考