tensorflow实现卷积层神经网络
在卷积层神经网络中,第一个卷积层会直接接收到像素级的输入,每个卷机操作只处理一小块图像,进行卷机变化后再传入到后面的网络,每一层卷机(也可以说是滤波器)都会提取到最有效的特征。这种方法可以提取到图像中最基础的特征,比如不同方向的边或者拐角,而后再进行组合和抽象形成更高阶的特征。图像中的特征无非就是点和边,无论多么复杂的图像都是点和边组合而成的,人眼识别物体的方式也是从点和边开始的,视觉神经接收到光信号后,每个神经元只接受一个区域的信号,并提取出点和边的特征,然后将点和边的信号传递给后面一层的神经元,再接着组合成更高阶的特征,比如三角形、正方形、直线、拐角等,再继续抽象组合,得到眼睛、鼻子、嘴等五官,最后再通过五官组合成一张脸。只要卷积核足够多就可以提取出各种方向的边或者各种形态的点,就可以让卷积层抽象出有效而丰富的高阶特征。每个卷积核滤波得到的图片就是一类特征的映射,即一个Feature Map。每一个卷积层提取的特征在后面的层中都会抽象组合成更高阶的特征。我们需要注意的是虽然我们需要训练的参数下降了,但是隐含节点的数量并没有下降,隐含节点的数量只和卷积的步长有关。如果步长为1,那么隐含节点的数量和输入图像像素的数量是一样的,如果步长为5,那么5*5的像素才需要一个隐藏节点,我们隐藏节点的数量就是像素数量的1/25。
一般的卷机层神经网络由多个卷积层构成,每个卷机层通常会进行如下几个操作:
(1)图像通过多个不同的卷积核的滤波,并加偏置,提取出局部特征,每一个卷积核会映射出一个新的2D图像。
(2)将前面的卷积核输出结果,进行非线性的激活函数的处理。目前最常用的是使用RELU函数,而以前最常用的是Sigmond。
(3)对激活函数的结果进行池化操作(即降采样,比如将2*2的图像降为1*1的图像),目前一般使用的是最大池化,保留最显著的特征,并提升模型的畸变容忍能力。