卷积神经网络

在图像处理中,神经网络的输入就是图像上的一个个像素,输入向量的维度就等于图像的像素数量,因此如果使用一般的神经网络(Fully Connected Feedforward Network),会导致参数过多并且使得训练效率低下。于是,我们想到可以利用图像处理的一些特性得到一种更简单的神经网络,这就是卷积神经网络(CNN)。

一、图像处理的性质

  1. 决定一个图片的“模式”(比如图片里是否有某个物体)可以通过图像里面的一小部分决定。比如通过查看图片中是否包含鸟嘴来判断图片中是否有鸟。
  2. 相同的特征可以出现在图片中的不同位置,它们是等价的。比如一只鸟出现在图片的任何地方都应当被识别出来。
  3. 图像可以做subsampling。比如从一个图像中删除某几行几列的像素,对于图像的辨识几乎没有影响。

二、训练过程

整体的过程如下图所示。输入图片以后,反复进行convolution和maxpolling,最后把flatten得到的结果输入一个Fully Connected Feedforward Network得到结果。

在这里插入图片描述


1.convolution

convolution主要针对的是图像处理的前两个性质。在convolution过程中,需要训练n个filter,filter就是一个矩阵,它代表了一个特征,因此希望特征出现在多大的范围内,filter就要多大。

如下图所示,假设输入是一张黑白的图片,每个像素点用0或者1来表示。首先想象有一个与filter大小相同的框,在图像的最左上角框出一个矩阵,把这个矩阵跟filter矩阵对应位置的元素相乘后相加,得到一个值。然后把框向后移动一个stride的长度并重复同样的操作。最后得到一个新的矩阵。

在这里插入图片描述


这个过程就相当于经过了一层特殊的神经网络。如图所示,filter中的值就相当于对应的weight,因此convolution的训练过程与一般的神经网络一样,可以使用Backpropagation来训练。

在这里插入图片描述


2.maxpooling
maxpooling的作用是进行subsampling的过程。把convolution得到的矩阵划分成几组,每组中取最大值,得到一个更小的矩阵。

3.flatten
把多个filter产生的矩阵表示为一个一维向量作为下一个神经网络的输入。

CNN的应用不仅局限在图像识别上,包括deep style(用一个图片的画风画出另一张图片),ALphaGo,语音识别(读频谱图)等。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...