赞
踩
卷积神经网络,主要是对图片进行处理。假如需要对一个1000*1000的图片进行分类,如果用传统的机器学习或者DNN,如要输入1000000个特征,当然也可以提前用一些方法进行降维,但是处理还是不方便。有人提出,人类对于图像的判断,也是通过对图像进行多层抽象完成。于是就提出了卷积的概念。
图中是一个图形识别的CNN模型。可以看出最左边的船的图像就是我们的输入层,计算机理解为输入若干个矩阵,这点和DNN基本相同。接着是卷积层(Convolution Layer),这个是CNN特有的。卷积层的激活函数使用的是ReLU(x)=max(0,x)。在卷积层后面是池化层(Pooling layer),池化层没有激活函数。
卷积层+池化层的组合可以在隐藏层出现很多次,上图中出现两次。而实际上这个次数是根据模型的需要而来的。当然我们也可以灵活使用使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,这些在构建模型的时候没有限制。但是最常见的CNN都是若干卷积层+池化层的组合,如上图中的CNN结构。
在若干卷积层+池化层后面是全连接层(Fully Connected Layer, 简称FC),全连接层其实就是我们前面讲的DNN结构,只是输出层使用了Softmax激活函数来做图像识别的分类。
什么是卷积?可以看下面这个动态图。
http://cs231n.github.io/assets/conv-demo/index.html
例子中,输入是三个矩阵(张量)(对应RGB),原始矩阵是5*5*3,但是进行了padding,变成了一个7*7*3的张量。那么这个张量对应的卷积核也应该是N*N*3的一个张量,也就是W0.
这里用了两个卷积核,也就是两个N*N*3的张量。
每个子矩阵进行卷积得到的结果(X1点积X2 + 偏置值),加起来进行Relu,将小于0的值设置为0.
为什么要进行卷积?对特征进行抽象,提出原始特征中的重要部分。每个卷积核对应一个重要的特征。
为什么卷积过程要进行padding?
卷积核在对张量进行striding的时候,对边框数据只用一次就丢弃了,太浪费。同时为了padding不引入噪声,可以填充一圈0.
什么是池化?为什么要池化?
池化就是对输入张量的各个子矩阵进行压缩。假如是2x2的池化,那么就将子矩阵的每2x2个元素变成一个元素,这样输入矩阵的维度就变小了。
要想将输入子矩阵的每nxn个元素变成一个元素,那么需要一个池化标准。常见的池化标准有2个,MAX或者是Average。即取对应区域的最大值或者平均值作为池化后的元素值。
下面这个例子采用取最大值的池化方法。同时采用的是2x2的池化。步幅为2。
如何进行图像分类?
在网络的最后,有一个全连接层,输出层采用softmax激活函数。输出该图像对应类别的概率。然后可以反向传递误差,更新权值。
CNN+TensorFlow实现图像分类
https://blog.csdn.net/qq_26645205/article/details/79459166
参考文献:
https://www.cnblogs.com/pinard/p/6483207.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。