卷积神经网络
不知道什么是卷积神经网络?没关系,大家应该用过淘宝的拍立淘吧,根据你照片识别出相似的商品,原理中就用到了卷积神经网络。它能根据你的一张图片提取特征,从而识别物体。当然卷积神经网络不仅在图像识别大有作为,接下来进入正题,揭开卷积神经网络的面纱。
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 |
总结:
参考
https://www.zhihu.com/question/52668301/answer/131573702
https://study.163.com/my#/smarts