TensorFlow中利用CNN处理图像总结

版权声明:本博客都是作者10多年工作总结 https://blog.csdn.net/Peter_Changyb/article/details/84134922

看了很多书,也实战了,但是总想用通俗的语言来讲述一下CNN处理的过程,今天我有幸和大家分享一下。

首先,卷积神经网络就是至少包含一层的神经网络,该层的功能是:计算输入f与可配置的卷积核g的卷积,生成输出。卷积的目的就是把卷积核应用到某个张量的所有点上,通过卷积核的滑动生成新的滤波后的张量。卷积的价值在于对输入降维能力,通过降维改变卷积核的跨度strides参数实现。设置跨度是调整输入张量维数的方法,strides参数格式与输入向量相同,面临挑战:如果应对输入在边界,可以采用对图像边界填充方式。数据格式NHWC(数目,高度,宽度,通道数)。卷积核的作用常常是增强卷积核中心位置像素的灰度。

然后,卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。激活函数:为神经网络的输入引入非线性,通过曲线能够刻画输入中更为复杂的变化,设计模型常推荐tf.nn.relu,tf.sigmoid,tf.tanh,tf.nn.dropout,性能较为突出,评价一个激活函数是否有用的因素如下:单调,采用梯度下降法寻找局部极值点;可微分,保证任何一个点可以求导数,可以使梯度下降法用到激活函数的输出上。

最后,CNN卷积神经网络层级结构 CNN网络一共有5个层级结构:

1 输入层:与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的输入层中预处理方式有:去均值 归一化 PCA/SVD降维等

2 卷积层: 就是局部感知,人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。

3 激励层:实际上是对卷积层的输出结果做一次非线性映射。如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。 常用的激励函数有:Sigmoid函数 Tanh函数 ReLU Leaky ReLU ELU Maxout   我自己对激励层处理建议:首先ReLU,因为迭代速度快,但是有可能效果不佳。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。

4 池化层 (Pooling):也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:Max Pooling:最大池化 Average Pooling:平均池化通过池化层,使得原本44的特征图压缩成了22,从而降低了特征维度。虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

5 输出层(全连接层) 经过前面若干次卷积+激励+池化后,来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性。当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的。

今天就分享到这里。

 

猜你喜欢

转载自blog.csdn.net/Peter_Changyb/article/details/84134922