卷积神经网络CNN卷积神经网络CNN卷积神经网络的定义最早来19世纪60年代科学家提出的感触野(Receptive

卷积神经网络(Convolutional Neural
Network,CNN),可以缓解图像识别、时间序列信息问题。深度上之前,借助SIFT、HoG等算法提取特征,集合SVM等机械上算法识别图像。

卷积神经网络(Convolutional Neural
Network,CNN),可以解决图像识别、时间序列信息问题。深度上之前,借助SIFT、HoG等算法提取特征,集合SVM等机械上算法识别图像。

相同、卷积神经网络

SIFT,缩放、平移、旋转、视角转变、亮度调整畸变的肯定程度内,具有无变性。有局限性,ImageNet
ILSVRC比赛最好结果错误率在26%上述,常年难以突破。

SIFT,缩放、平移、旋转、视角转变、亮度调整畸变的自然程度内,具有无变性。有局限性,ImageNet
ILSVRC比赛最好结果错误率在26%上述,常年难以突破。

卷积神经网络的概念最早来19世纪60年份科学家提出的感想野(Receptive
Field)。当时科学家通过对猫的视觉皮层细胞研究发现,每一个视觉神经元只会处理同多少片区域的视觉图像,即感受野。到了20世纪80年代,日本科学家提出神经认知机(Neocognitron)的定义,可以算是卷积网络最初的贯彻原型。神经认知机中含两像样神经元,用来抽取特征的S-cells,还生因此来抗形变的C-cells,其中S-cells对承诺我们今天主流卷积神经网络中的卷积核滤波操作,而C-cells则指向承诺激活函数、最深池化(Max-Pooling)等操作。

卷积神经网络提取特征效果又好,分类训练时自动提取最灵特征。卷积神经网络CNN,降低图像数据预处理要求,避免复杂特征工程。CNN使用图像原始像素输入,对缩放、平移、旋转畸变具有无变性,强泛化性。CNN卷积权值共享结构,大幅压缩神经网络参数量,防止了拟合,降低神经网络模型复杂度。延时神经网络TDNN,时间权值共享,降低学习时序列信号复杂度。

卷积神经网络提取特征效果还好,分类训练时自动取最得力特征。卷积神经网络CNN,降低图像数据预处理要求,避免复杂特征工程。CNN使用图像原始像素输入,对缩放、平移、旋转畸变具有无变性,强泛化性。CNN卷积权值共享结构,大幅缩减神经网络参数量,防止了拟合,降低神经网络模型复杂度。延时神经网络TDNN,时间权值共享,降低学习时间序列信号复杂度。

一般的卷积神经网络由多单卷积层构成,每个卷积层中司空见惯会进展如下几独操作。

感受野(Receptive
Field),每个视觉神经元只会处理同稍微片区域视觉图像。神经认知机(Neocognitron),两好像神经元,抽取特征S-cells对诺主流卷积神经网络卷积核滤波操作,抗形变C-cells对承诺激活函数、最特别池化(Max-Pooling)操作。LeCun
LeNet
CNN首独成功多叠训练网络布局。卷积神经网络利用空间组织关系减少上参数量,提高反为传来算法训练效率。

感触野(Receptive
Field),每个视觉神经元只会处理同多少片区域视觉图像。神经认知机(Neocognitron),两像样神经元,抽取特征S-cells对许主流卷积神经网络卷积核滤波操作,抗形变C-cells对诺激活函数、最可怜池化(Max-Pooling)操作。LeCun
LeNet
CNN首个成功多重合训练网络布局。卷积神经网络利用空间组织涉及减少学习参数量,提高反为传播算法训练效率。

(1)图像通过多个不同的卷积核的滤波,并加偏置(bias),提取出有特征,每一个卷积核会映射出一个初的2D图像。

先是单卷积层,接受图像像素级输入,每个卷积操作就处理同多少片图像。卷积变化后传出后面网络。每一样叠卷积(滤波器),提取数额极其实用特征。提取图像最基础特征,组合抽像更高阶特征。

第一独卷积层,接受图像像素级输入,每个卷积操作就处理同稍片图像。卷积变化后传后面网络。每一样重合卷积(滤波器),提取数额最可行特征。提取图像最基础特征,组合抽像更高阶特征。

(2)将眼前卷积核的滤波输出结果,进行非线性的激活处理。(ReLU、Sigmoid函数)

诚如卷积神经网络多个卷积层构成。每个卷积层,图像多单例外卷积核滤波,加偏置(bias),提取部分特征,每个卷积核映射一个初2D图像,卷积核滤波输出结果,非线性激活函数处理(ReLU),激活函数结果池化操作(降采样),最可怜池化,保留最鲜明特征,提升型畸变容忍能力。可以加LRN(Local
Response Normalization 局部响应归一化层),Batch Normalizations。

一般卷积神经网络多个卷积层构成。每个卷积层,图像多单例外卷积核滤波,加偏置(bias),提取部分特征,每个卷积核映射一个新2D图像,卷积核滤波输出结果,非线性激活函数处理(ReLU),激活函数结果池化操作(降采样),最深池化,保留最引人注目特征,提升型畸变容忍能力。可以加LRN(Local
Response Normalization 局部响应归一化层),Batch Normalizations。

(3)对激活函数的结果还开展池化操作(即退采样),目前貌似是采取最充分池化,保留最引人注目的特性,并提升型的失真容忍能力。

卷积核权值共享,卷积层多只不同卷积核,卷积核对应滤波后映射新图像,同一新图像每个像素来自完全相同卷积核。降低模型复杂度,减轻了拟合,降低计算量。

卷积核权值共享,卷积层多单不等卷积核,卷积核对应滤波后映射新图像,同一新图像每个像素来自完全相同卷积核。降低模型复杂度,减轻了拟合,降低计算量。

权值共享:一个卷积层中好产生差不多只不同之卷积核,而诸一个卷积核都对应一个滤波后映射出底初图像,同一个新图像中各一个如素都来自完全相同的卷积核。权值共享可以退模型复杂度,减轻了起合并降低计算量。

图像空间发出组织结构,每个像素点与上空周围像素点有紧密联系,与最遥远像素点少沟通,即感受野。每个感受野只接受平等稍微片区域信号。小片区域外像素互相关联,每个神经元不欲收取全部诸如素点信息,只收取有像素点输入,再以有着神经元收到部分信息综合起来得到全局信息。将皆连模型改吗有连接,从隐含层每个隐含节点和全部像素相连,改也每个隐含节点连接有像素节点。

图像空间发出组织结构,每个像素点与上空周围像素点有紧密联系,与最漫长像素点少沟通,即感受野。每个感受野只接受平等不怎么片区域信号。小片区域外如素互相关联,每个神经元不欲收取全部诸如素点信息,只收到有像素点输入,再将有所神经元收到部分信息汇总起来得到全局信息。将皆连模型改吗部分连接,从隐含层每个隐含节点和整像素相连,改吧每个隐含节点连接有像素节点。

局部连接方式卷积操作,默认每个隐含节点参数完全等同。不再担心隐含节点数量以及图片大小,参数量只与卷积核大小有关。权值共享。一个卷积核只能提取一栽卷积核滤波结果,只能领取一种植图片特征。每个卷积核滤波图像是如出一辙好像特色映射,一个Feature
Map。一般,第一独卷积层100个卷积核已经充分。

有的连接方式卷积操作,默认每个隐含节点参数完全同。不再担心隐含节点数量及图片大小,参数量只与卷积核大小有关。权值共享。一个卷积核只能领到一栽卷积核滤波结果,只能领取一种植图片特征。每个卷积核滤波图像是相同类特性映射,一个Feature
Map。一般,第一独卷积层100独卷积核已经充分。

大局连接和部分连接

卷积,不管图片尺寸,训练权值只同卷积核大小、数量有关,可以为此十分少参数量处理任意大小图片。每个卷积层提取特征,在后面层抽象组合又高阶特征,多叠抽象卷积网络表达能力强,效率高。隐含节点数量并未减退,隐含节点数量只有和卷积步长有关。隐含节点数量=输入像素数量/(步长X步长)。

卷积,不管图片尺寸,训练权值只跟卷积核大小、数量有关,可以就此特别少参数量处理任意大小图片。每个卷积层提取特征,在后面层抽象组合又高阶特征,多重合抽象卷积网络表达能力强,效率高。隐含节点数量并未下跌,隐含节点数量仅与卷积步长有关。隐含节点数量=输入像素数量/(步长X步长)。

如图所示,如果图像的尺码是1000如素x1000像从,并且只要为黑白图像(只出一个颜色通道),那么等同布置图纸就出100万只像素点,输入数据的维度也是100万。如果总是一个平等大小的隐含层(100万只带有节点),那么将有100万x100万=10000亿个连。仅仅一个全连接层(Fully
Connected
Layer),就生一万亿连的权要训练。所以,我们须缩减用训练之权重数量,一是退计算的复杂度,二凡是了多的连续会导致惨重的过拟合。

卷积神经网络,局部连接(Local Connection)、权值共享(Weight
Sharing)、池化层(Pooling)降采样(Down-Sampling)。局部连接、权值共享降低参数量,训练复杂度下降,减轻了拟合。权值共享,卷积网络平移容忍性。池化层降低输出参数量,模型轻度形变容忍性,提高泛化能力。训练中自动完成特征提取抽象,同时模式分类,降低图像识别难度。

卷积神经网络,局部连接(Local Connection)、权值共享(Weight
Sharing)、池化层(Pooling)降采样(Down-Sampling)。局部连接、权值共享降低参数量,训练复杂度下降,减轻了拟合。权值共享,卷积网络平移容忍性。池化层降低输出参数量,模型轻度形变容忍性,提高泛化能力。训练中自行就特征提取抽象,同时模式分类,降低图像识别难度。

图像于半空上是有集体结构的,每一个诸如素点在空间上及周围的比如说素点实际上是发生紧密联系的,但是与极致遥远的比如素点就不肯定生啊关系。这就是前方提到的视觉感受野,每一个感受野只接受平等粗片区域之信号,这同样小片区域外的像素是互关联的,每一个神经元不需吸收全部像素点的音信,只需要收取有的比如素点作为输入,而后将这些有些信息汇总起来就是可抱全局的音。这样虽可以以都连的模式改变呢局部连接。假设有感受野的轻重是10×10,即每个隐含节点才和10×10只像素点连接,那么现在就特待10x10x100万=1亿个连续,比1万亿紧缩了1000倍增。

LeNet5 始为1994年,深层卷积神经网络。Yann
LeCun。可训练参数卷积层,用少量参数在图像多只位置取相似特性。如果图像独立像从直接发输入,利用非交图像很强之上空相关性。每个卷积层包含卷积、池化、非线性激活函数。卷积提取空间特点。降采样(Subsample)平均池化层(Average
Pooling)。双曲正切(Tanh)或S型(Sigmoid)激活函数。MLP最后分类器。层间稀疏连接减少计算复杂度。

LeNet5 始为1994年,深层卷积神经网络。Yann
LeCun。可训练参数卷积层,用少量参数在图像多单职位取相似特性。如果图像独立像从直接发输入,利用非至图像很强之空间相关性。每个卷积层包含卷积、池化、非线性激活函数。卷积提取空间特点。降采样(Subsample)平均池化层(Average
Pooling)。双曲正切(Tanh)或S型(Sigmoid)激活函数。MLP最后分类器。层间稀疏连接减少计算复杂度。

State-of-the-art。LeNet5奠定现代卷积神经网络基石。LeNet5,输入图像,三单卷积层,一个全连接层,一个高斯连接层。第一独卷积层C1闹6个卷积核,卷积核尺寸为5×5,共(5×5+1)x6=156单参数。1只bias。2×2平均池化层S2跌采样。Sigmoid激活函数非线性处理。第二个卷积层C3,卷积核尺寸5×5,16单卷积核,16单Feature
Map。第二只池化层S4,2×2回落采样。第三独卷积层C5,120个卷积核,卷积大小5×5,输入5×5,构成全连,可以算全连接层。F6咸连接层,84个饱含节点,激活函数Sigmoid。最后一重合,欧式径向基函数(Euclidean
Radial Basis Function)单元构成,输出最后分类结果。

State-of-the-art。LeNet5奠定现代卷积神经网络基石。LeNet5,输入图像,三个卷积层,一个全连接层,一个高斯连接层。第一单卷积层C1发生6只卷积核,卷积核尺寸为5×5,共(5×5+1)x6=156个参数。1个bias。2×2平均池化层S2下降采样。Sigmoid激活函数非线性处理。第二独卷积层C3,卷积核尺寸5×5,16个卷积核,16个Feature
Map。第二单池化层S4,2×2退采样。第三只卷积层C5,120独卷积核,卷积大小5×5,输入5×5,构成全连,可以算是全连接层。F6净连接层,84只带有节点,激活函数Sigmoid。最后一重叠,欧式径向基函数(Euclidean
Radial Basis Function)单元构成,输出最后分类结果。

有连接和卷积连接

参考资料:
《TensorFlow实战》

参考资料:
《TensorFlow实战》

当地方通过有些连接(Locally
Connect)的点子,将连接数从1万亿下挫至1亿,但照样偏多,需要继续下挫参数量。现在带有层每一个节点都与10×10的如素相连,也不怕是各个一个含节点都存有100独参数。假设有连接方式是卷积操作,即默认每一个饱含节点的参数还统统等同,那无论是图像发差不多充分,都是立即10×10=100只参数,即卷积核的尺码,这就是卷积都压缩参数量的献。但是倘若我们仅仅出一个卷积核,我们就是只好领取一种卷积核滤波的结果,即只能领到一栽图片特征,每一个卷积核滤波得到的图像就是同像样特色的投,即一个Feature
Map。只要我们提供的卷积核数量足够多,能提出各个方向的界限或各形态的接触,就可以叫卷积层抽象出有效设长的高阶特征。这样的话,如达到图所示,我们使用100只卷积核放在第一独卷积层就既大丰厚了,我们的参数量就是100(卷积核数量)x
100(每个卷积核的10×10独参数)=
1万独,相比前的1亿并且缩小10000加倍。每一个卷积层提取的表征,在后的重合中都见面抽象组合成又高阶的特点,而且大多叠抽象的卷积网络表达能力更胜,效率还强,相比就使用一个隐含层提取全部高阶特征,反而好省大量底参数。

接付费咨询(150冠诸时),我之微信:qingxingfengzi

迎付费咨询(150首先诸小时),我的微信:qingxingfengzi

小结:卷积神经网络的要就是一对连接(Local
Connection)、权值共享(Weight
Sharing)和池化层(Pooling)中的退采样(Down-Sampling)。其中,局部连接和权值共享降低了参数量,使训练复杂度大大下降,并减轻了了拟合。同时权值共享还予以了卷积网络对倒的容忍性,而池化层降采样则益下滑了出口参数量,并与模型对轻度形变的容忍性,提高了型的泛化能力。

二、LeNet5网络

闻名的LeNet5出生于1994年,是最为早的深层卷积神经网络之一,并且推动了纵深上之向上。从1988年起,在数打响之迭代之后,由Yann
LeCun完成的开拓性成果给取名吧LeNet5。

LeNet5及时底风味有如下几沾:

  • 每个卷积层包括三单部分:卷积、池化和非线性激活函数

  • 应用卷积提取空间特点

  • 下跌采样(Subsample)的平分池化层(Average Pooling)

  • 双曲正切(Tanh)或 S 型(Sigmoid)的激活函数

  • MLP作为最终的分类器

  • 臃肿与层内的疏连接减少计算复杂度

LeNet5遭受的诸多特色现在仍然当state-of-the-art卷积神经网络中利用,可以说LeNet5是奠定了现卷积神经网络的基础的作。

LeNet5结构图

它们的输入图像是32×32之灰度值图像,后面来三独卷积层(C1、C3、C5),两个下采样层(S2、S4),一个全连接层(F6)和一个高斯连接层。

  • C1是一个卷积层

蕴含6单卷积核(特征图),卷积核尺寸为5×5,特征图大小为28×28;每个卷积核的参数有55(unit参数)+
1(bias参数)= 26独参数;所以共有连接26
28286 =
122304单连续,每个特征图内共享参数,所以共有参数26*6 = 156个参数。

  • S2是个下采样层(平均池化)

包含6个卷积核,用一个2×2之平分池化层S2开展降低采样,再下是一个Sigmoid激活函数用来进行非线性处理。每个池化层的参数有2*2

  • 1(bias)= 5独参数;所以共有514146 =
    5880单连续,每个特征图内共享参数,所以共有参数5\
    6 = 30个参数。

  • C3是一个卷积层

蕴含16独卷积核(特征图),卷积核尺寸是5×5,特征图大小为10×10;注意:这里的16只Feature
Map不是整连接至面前6个Feature
Map的输出的,有些仅仅连接了内的几乎独Feature Map,这样加了范的多样性。

S2和C3之间的连接

诸如,C3交汇的号码为0的特征层与S2的号子为0、1、2之风味层相连接,总共3个5×5节点相连接。

  • S4凡一个下采样层(池化层)

与S2一致,都是2×2之产采样。包含16只卷积核(特征图),卷积核尺寸为2×2,特征图大小也5×5;所以共有(22+1)5516
= 2000独连续,每个特征图内共享参数,所以共有参数5 * 16 =
80只可训练参数。

  • C5是一个卷积层

C5发生120只卷积核,卷积大小相同为5×5,因为输入图像的轻重刚好也是5×5,所以做了都连,也真是全连接层。每个单元以及S4层的周16单单元的55天地持续,连接数
= 可训练参数 =(5
516+1)120 = 48120个。

  • F6凡是一个全连接层

发出84只包含节点(设计由选择84),与C5重叠都连;连接数 = 可训练参数 =
(120+1)*84 = 10164独。激活函数为Sigmoid。

  • Output层

Output作为最终一叠,由欧式径向基函数(Euclidean Radial Basis
Function)单元构成,它输出最后的分类结果。

三、 TensorFlow实现

率先载入MNIST数据集,并创建默认的 Interactive Session。

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets(“MNIST_data/”, one_hot=True)

sess = tf.InteractiveSession()

接下去要兑现之卷积神经网络会发成百上千的权重和偏置需要创造,因此我们事先定义好初始化函数以便重复使用。我们得被权重制造一些即兴的噪音来打破了对如,比如截断的正态分布噪声,标准差设为0.1。同时,因为我们利用ReLU,也为偏置增加部分有点的在(0.1)来避免死亡节点(dead
neurons)。

def weight_variable(shape):

initial = tf.truncated_normal(shape, stddev=0.1)

return tf.Variable(initial)

def bias_variable(shape):

initial = tf.constant(0.1, shape=shape)

return tf.Variable(initial)

卷积层、池化层也是过渡下要重复使用的,因此为为她们各自定义创建函数。这里的tf.nn.conv2d凡是TensorFlow中之2维卷积函数,参数中
x 是输入,W 是卷积的参数,比如
[5,5,1,32]:前面的有数个数字代表卷积核的尺码;第三只数字代表有稍许只channel。因为只有灰度单色,所以是1,如果是五颜六色的RGB图片,这里当是3。最后一个数字代表卷积核的数码,也便是以此卷积层会提取多少类似的特点。Strides代表卷积模板移动的宽,都是1象征会面不剩漏地扛喽图片的各个一个触及。Padding代表边界的处理方式,这里的
SAME 代表被边界加上 Padding
让卷积的输出及输入保持一如既往(SAME)的尺寸。tf.nn.max_pool 是TensorFlow
中之最好要命池化函数,这里运用 2×2 的极致老池化,即以一个 2×2 的如素块将为 1×1
的像素。最特别池化会保留原像素块中灰度值最高的那么一个像素,即保留最鲜明的风味。因为要圆达标压缩图片尺寸,因此池化层的
strides
也如为横两只样子为2呢宽度。如果幅度还也1,那么会获一个尺寸不变的图。

def conv2d(x, W):

return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding=’SAME’)

def max_pool_2x2(x):

return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],
padding=’SAME’)

当规划卷积神经网络的组织之前,先定义输入的placeholder, x 是特点,
y_大凡实际的 label。因为卷积神经网络会采取到空中组织信息,因此待将 1D
的输入向量转化为 2D 的图片结构,即由1×784之款型转为原始之 28×28
的结构。同时因为只来一个颜色通道,故最终尺寸为 [-1, 28, 28, 1],前面的
-1 代表样本数不定点,最后的 1
代表颜色通道数量。这里用tensor的变形函数是 tf.reshape。

x = tf.placeholder(tf.float32, [None, 784])

y_ = tf.placeholder(tf.float32, [None, 10])

x_image = tf.reshape(x, [-1, 28, 28, 1])

对接下去定义第一个卷积层,先使用前写好之函数进行参数初始化,包括 weights
和 bias, 这里的 [5, 5, 1, 32]意味着卷积核尺寸也 5×5,1独颜色通道,
32个不等之卷积核。然后使用 conv2d
函数进行卷积操作,并丰富偏置,接着又运ReLU激活函数进行非线性处理。最后,使用最充分池化函数max_pool_2x2对准卷积的输出结果进行池化操作。

W_conv1 = weight_variable([5, 5, 1, 32])

b_conv1 = bias_variable([32])

h_conv1 = tf.nn.sigmoid(conv2d(x_image, W_conv1) + b_conv1)

h_pool1 = max_pool_2x2(h_conv1)

然后定义第二只卷积层,这个卷积层和率先独卷积层一样,唯一不同的凡,卷积核的数额改为64,也就是说这等同重叠的卷积会提取64栽特色。

W_conv2 = weight_variable([5, 5, 32, 64])

b_conv2 = bias_variable([64])

h_conv2 = tf.nn.sigmoid(conv2d(h_pool1, W_conv2) + b_conv2)

h_pool2 = max_pool_2x2(h_conv2)

全连接层。

W_fc1 = weight_variable([7764, 1024])

b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7764])

h_fc1 = tf.nn.sigmoid(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

末尾以出口连接至一个Softmax层,得到最终的票房价值输出。

W_fc2 = weight_variable([1024, 10])

b_fc2 = bias_variable([10])

y_conv = tf.nn.softmax(tf.matmul(h_fc1, W_fc2) + b_fc2)

咱定义损失函数为 cross entropy,
优化器使用Adam,并予以一个较小之学速率1e-4。

keep_prob = tf.placeholder(tf.float32)

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv),
reduction_indices=[1]))

train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

tf.global_variables_initializer().run()

for i in range(20000):

batch = mnist.train.next_batch(50)

if i % 100 == 0:

train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_:
batch[1], keep_prob: 1.0})

print(“step %d, training accuracy %g”%(i, train_accuracy))

train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob:
0.5})

print(“test accuracy %g”%accuracy.eval(feed_dict={x: mnist.test.images,
y_: mnist.test.labels, keep_prob: 1.0}))

使用sigmoid的结果如下:

利用sigmoid的发端数值

最后结出

采用relu的结果如下:

行使ReLU的起数值

说到底结果

足见,ReLU比Sigmoid更好用几。

Win10+TensorFlow-gpu。

上述内容出自《TensorFlow 实战》 黄文坚、唐源。

相关文章