卷积神经网络模型(CNN)基本架构
1.提取图片特征
假如我们有一个6*6的像素图,
在这一步,我们需要使用卷积核也可以称为特征过滤器,提取图片特征。
提取特征的计算规则:
我们要按照顺序提取原始图片中3*3的像素区域,再将其每个像素单元依此和卷积核内相对应的像素单元相乘再求和。最后把结果记录在新的4*4的像素图上
流程如下:
。。。。。。。。。。。。。。。。。
计算完成后,我们可以得到一个4*4的特征图,我们可以根据数字的大小来设置颜色的深浅,可以看到数字7竖直部分的特征被很好提取出来,但是水平特征却被提取出来。
这是因为在特征提取计算过程中,像素图由原来的6*6被降维成了4*4,边缘的特征丢失了。因此,为了解决边缘特征丢失的问题,我们可以使用“Padding”的扩充方法。将原来的6*6图像,扩充成8*8,扩充部分的像素值均设置为0。
这是可以发现水平特征和垂直特征都被很好的提取。
2.最大池化(Max Pooling)
这个过程的目的是将图片中的数据进一步压缩,仅反映图片中最突出的数据。
例如,我们将6×6的特征图用2×2的网格分割成3×3的部分,然后提取每个部分中的最大值。最后放于最大值化后的3×3网格中。池化后的数据保留了原始图片中最精华的特征部分。
3.扁平化处理
我们把池化后的数据进行扁平化处理,把两个3×3的像素图叠加转化成一维的数据条。
数据条录入到后面的“全连接隐藏层”,最终产生输出结果。扁平化之后的流程和我们之前介绍的Ann模型是完全一致的。全连接隐藏层意味着这里的任一个神经元都与前后层的所有神经元相连接。这样就可以保证最终的输出值是基于图片整体信息的结果。而在输出阶段,我们可以使用学习笔记(1)里提到的sigmoid函数返回0到1的值,代表该图片是否是7的概率。也可以用Softmax函数返回它分别属于0到9的概率。
CNN流程可视化在线界面CNN Explainer (poloclub.github.io)
卷积神经网络应用:
1.检测任务
2.分类与检索
3.医学任务
4.超分辨率重构
5.医学任务
6.无人驾驶
7.人脸识别
卷积神经网络与传统网络的区别
卷积神经网络整体架构
卷积神经网络MINST手写体识别
前面我们已经用普通的全连接神经网络做过MINST手写体识别,这里用卷积神经网络再次训练,并对比。
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model = models.Sequ