1、3-1 3-1 人脑是如何学习的人脑是如何学习的3-2 3-2 模仿人脑模仿人脑神经元(感知器)神经元(感知器)3-3 3-3 非线性神经元非线性神经元3-4 3-4 神经网络架构神经网络架构3-5 3-5 梯度下降梯度下降3-6 3-6 反向传播反向传播BPBP3-7 3-7 实现简单神经网络实现简单神经网络第三章简单神经网络人脑是一个神奇的世界。它可以让我们认识许多东西,并在认人脑是一个神奇的世界。它可以让我们认识许多东西,并在认识这些东西以后得到很好的泛化能力。就好像我们认识了一个识这些东西以后得到很好的泛化能力。就好像我们认识了一个白猫以后,就能认识其他大大小小,颜色不同的猫一样。或者
2、白猫以后,就能认识其他大大小小,颜色不同的猫一样。或者当我们遇到某些需要做决定的事情时,我们总能根据经验和实当我们遇到某些需要做决定的事情时,我们总能根据经验和实际情况做出一个合乎常理的决策。既然人脑的功能如此强大又际情况做出一个合乎常理的决策。既然人脑的功能如此强大又如此聪慧,那么我们能不能让计算机模仿大脑,从而让它也变如此聪慧,那么我们能不能让计算机模仿大脑,从而让它也变得更加智能呢得更加智能呢?本章简介本章简介3-1 3-1 人脑是如何学习的人脑是如何学习的据估计,人类大脑拥有据估计,人类大脑拥有10001000亿个神经细胞,如果把它们排成一条直线,亿个神经细胞,如果把它们排成一条直线,
3、长度将达到长度将达到10001000公里。大脑是由许多神经元联结而成的巨大网络,如公里。大脑是由许多神经元联结而成的巨大网络,如图图3-13-1所示所示。图图3-1 3-1 人脑神经网络示意图人脑神经网络示意图神经元的树突接收外界感官信息,当神经元的树突接收外界感官信息,当神经元被激活时,神经元通过细胞轴神经元被激活时,神经元通过细胞轴突将信息传导到其他神经元,下一个突将信息传导到其他神经元,下一个神经元的树突继续用来接收其他神经神经元的树突继续用来接收其他神经元的输入信号,以此类推。元的输入信号,以此类推。神神经经元元被被激激活活有有一一种种很很特特殊殊的的性性质质:当当神神经经元元被被刺刺
4、激激的的强强度度未未达达到到某某一一阈阈值值时时,神神经经冲冲动动不不会会发发生生;而而当当刺刺激激强强度度达达到到或或超超过过某某一一阈阈值值时时,神神经经冲冲动动能能够够发发生生并并达达到到最最大大强强度度。此此后后刺刺激激的的强强度度即即使使再再持持续续加加强强或或减减弱弱,已已诱诱发发的的冲冲动动强强度度也也不不再再发发生生变变化化。图图3-23-2给给出出了了一个简单的神经元结构。一个简单的神经元结构。图图3-2 3-2 神经元的构成神经元的构成举个现实生活中的例子举个现实生活中的例子例如,听说当年的老同学们打算举办一个聚会。你想念当年的老同学,例如,听说当年的老同学们打算举办一个聚
5、会。你想念当年的老同学,正考虑是否去参加。或许会通过如下三个因素设置权重来作出决定。正考虑是否去参加。或许会通过如下三个因素设置权重来作出决定。1.1.天气好吗?天气好吗?2.2.你的前男朋友或者前女朋友会不会出现?你的前男朋友或者前女朋友会不会出现?3.3.这个聚会举办的地点是否便于前往?这个聚会举办的地点是否便于前往?我我们们可可以以把把天天气气好好设设为为1,不不好好为为0;前前任任出出现现设设为为-1,不不出出现现设设为为0;聚聚会会地地点点交交通通方方便便设设为为1,不不方方便便设设为为0。我我们们的的大大脑脑就就会会做做出出相相应应判判断断,也也就就是是神神经经元元的的树树突突会会
6、受受到到刺刺激激,并并且且把把相相应应的的信信息息传传递递给给其其它它神神经经元元,使使我我们们做做出出最最终的判断,如图终的判断,如图3-3所示。所示。图图3 3-3-3 神经元处理信息示意图神经元处理信息示意图(3-3-1 1)式式3-13-1,当当DecideDecide数数值值超超过过一一定定值值以以后后,就就做做出出去去参参加加聚聚会会的的打打算算,这这个个值值就就称称为为阈阈值值。对对应应神神经经元元的的特特性性来来讲讲,就就是是当当神神经经元元的的刺刺激激强度达到或超过某一阈值时,神经冲动才能够发生,如图强度达到或超过某一阈值时,神经冲动才能够发生,如图3-43-4所示。所示。图
7、图3-4 3-4 神经元处理不同权重信息示意图神经元处理不同权重信息示意图3-2 3-2 模仿人脑模仿人脑神经元(感知器神经元(感知器)图图3 3-5-5 感知器感知器一一个个庞庞大大的的神神经经网网络络是是由由众众多多神神经经元元构构成成的的。如如果果想想要要构构造造一一个个符符合合要要求求的的大大规规模模神神经经网网络络,就就必必须须要要从从单单个个神神经经元元入入手手。种种被被称称为为“感感知知器器”的的人人工工神神经经元元在在20 20 世世纪纪五五、六六年年代代由由科科学学家家Frank Frank Rosenblatt Rosenblatt 发明出来。发明出来。对对应应我我们们上上
8、一一节节所所讲讲的的实实际际问问题题,神神经经网网络络的的输输出出,由由分分配配权权重重后后的的总总和和来来决决定定,当当这这个个数数值值大大于于或或小小于于某某个个阈阈值值的的时时候候,我我们们就就会会做做出出去去参参加加还还是是不不参参加加聚聚会会的的决决定定。假假设设我我们们去去参参加加聚聚会会的的情情况况用用数数字字1 1来来表表示示,不不去去的的情情况况则则用用0 0来来表表示示,那那么么感感知知器器的的工工作作方方法法可可以用代数形式去表示以用代数形式去表示:(3-3-2 2)这就是一个感知器的基本表示。我们可以根据上述的数学模型,认这就是一个感知器的基本表示。我们可以根据上述的数
9、学模型,认为感知器是一个根据输入与权重来做出决定的设备。为感知器是一个根据输入与权重来做出决定的设备。图图3 3-6-6 感知器网络感知器网络这这个个例例说说明明了了一一个个感感知知器器如如何何能能权权衡衡不不同同的的依依据据来来进进行行决决策策。如如果果遇遇到到更更加加复复杂杂的的问问题题,我我们们可可以以增增加加感感知知器器网网络络的的复复杂杂程程度度,以以增加它的处理能力,如图增加它的处理能力,如图3-63-6所示。所示。inputinput是是输输入入数数据据。第第一一列列的的三三个个神神经经元元被被称称为为第第一一层层感感知知器器,分分别别对对应应天天气气、人人员员和和交交通通这这三
10、三个个因因素素。而而第第二二层层的的感感知知器器是是在在权权衡衡上上一一层层的的决决策策结结果果并并做做出出决决定定。第第三三层层中中的的感感知知器器能能进进行行更更加加复复杂杂的的决决策策。图图3-63-6中中第第三三层层感感知知器器只只有有一一个个神神经经元元,代代表表输输出出outputoutput。以以这这种种方方式式,一一个个多多层层的的感感知器网络就可以从事复杂巧妙的决策。知器网络就可以从事复杂巧妙的决策。一一个个复复杂杂网网络络拥拥有有众众多多感感知知器器,我我们们不不可可能能依依次次去去设设定定阈阈值值(人人为为设设定定阈阈值值也也存存在在不不确确定定性性)。同同时时,神神经经
11、网网络络本本身身也也可可能能存存在在误误差差。因此,我们不妨将阈值左移:因此,我们不妨将阈值左移:可以整理为:可以整理为:(3-3-3 3)(3-3-4 4)我们也可以利用向量点积的形式来代替我们也可以利用向量点积的形式来代替(3-3-5 5)B称为偏置(称为偏置(Bias),式),式3-5为感知器的一般表达式。为感知器的一般表达式。3-3 3-3 非线性神经元非线性神经元复复杂杂的的数数学学模模型型很很多多是是非非线线性性的的。众众多多线线性性模模型型的的叠叠加加无无法法很很好地拟合非线性部分,如图好地拟合非线性部分,如图3-73-7所示。所示。为了解决上述问题,我们引入激活函数(为了解决上
12、述问题,我们引入激活函数(Activation FunctionsActivation Functions)。)。激激活活函函数数给给神神经经元元引引入入了了非非线线性性因因素素,使使得得神神经经网网络络可可以以任任意意逼逼近近任任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。何非线性函数,这样神经网络就可以应用到众多的非线性模型中。图图3-7 3-7 线性不可分(左)与线性可分(右)样本线性不可分(左)与线性可分(右)样本如如何何引引入入激激活活函函数数呢呢?我我们们通通常常将将激激活活函函数数与与线线性性神神经经元元合合并并在在一一起使之成为非线性神经元,其原理如图起使之成为非
13、线性神经元,其原理如图3-83-8所示。所示。图图3-8 3-8 非线性神经元原理非线性神经元原理下面介绍几种典型的激活函数下面介绍几种典型的激活函数Sigmoid函数函数表达式函数表达式:函数图像函数图像:特特点点:它它能能够够把把输输入入的的连连续续实实值值变变换换为为0 0和和1 1之之间间的的输输出出。特特别别的的,如如果果输输入入是是非非常常大大的的负负数数,那那么么输输出出就就是是0 0;如如果果输输入入是是非非常常大大的的正数,输出就是正数,输出就是1 1。(3-3-7 7)图图3-9 Sigmoid3-9 Sigmoid函数函数将上将上述的表达式带入述的表达式带入sigmoid
14、sigmoid函数,得到函数,得到可以看出可以看出:这这样样看看来来它它似似乎乎还还是是一一个个感感知知机机,只只不不过过是是将将数数据据压压缩缩进进0,10,1范范围围内内。当当在在0,10,1之之间间的的时时候候与与线线性性神神经经元元有有所所偏偏离离,其其原原因因就就是是引入了非线性。引入了非线性。(3-3-9 9)(3-3-8 8)Tanh函数函数表达式函数表达式:函数图像函数图像:性质:性质:引入引入TanhTanh非线性函数后,曲线关于坐标轴奇对非线性函数后,曲线关于坐标轴奇对称称。(3-3-1010)图图3-10 3-10 TanhTanh函函数数ReLu函数函数表达式函数表达式
15、:函数图像函数图像:性性质质:ReLUReLU函函数数其其实实就就是是一一个个取取最最大大值值函函数数,但但是是这这并并不不是是全全区区间间可可导导的的。由由于于只只需需要要判判断断输输入入是是否否大大于于0 0,所所以以计计算算速速度度非非常常快快,收敛速度远快于收敛速度远快于sigmoidsigmoid和和tanhtanh函数。函数。ReLuReLu是目前常用的激活函数。是目前常用的激活函数。(3-3-1111)图图3-11 3-11 ReLuReLu函数函数3-4 3-4 神经网络架构神经网络架构在在了了解解了了单单个个神神经经元元(感感知知器器)和和非非线线性性激激活活函函数数后后,现
16、现在在可可以以考考虑虑组组建建较较为为复复杂杂的的神神经经网网络络了了。本本节节先先介介绍绍一一些些神神经经网网络络的的术术语。语。如图如图3-123-12所示,假设我们获得了这样一个神经网络:所示,假设我们获得了这样一个神经网络:图图3-12 3-12 神经网络基本构造神经网络基本构造这这个个网网络络中中最最左左边边的的称称为为输输入入层层(Input Input LayerLayer),其其中中的的神神经经元元称称为为输输入入神神经经元元,原原始始数数据据由由该该层层输输入入到到神神经经网网络络进进行行后后续续处处理理。最最右右边边的的为为输输出出层层(Output Output Laye
17、rLayer),包包含含有有输输出出神神经经元元,该该输输出出层层是是神神经经网网络络对对样样本本处处理理后后的的最最终终结结果果,例例如如分分类类结结果果。在在输输入入层层和和输输出出层层之之间间的的是是中中间间层层,也也被被称称为为隐藏层或隐含层隐藏层或隐含层(Hidden Hidden LayerLayer)。)。设计网络的输入、输出层通常是比较简单、直接的。设计网络的输入、输出层通常是比较简单、直接的。例例如如,我我们们知知道道了了一一朵朵花花的的花花萼萼长长度度、宽宽度度,花花瓣瓣的的长长度度、宽宽度度,尝尝试利用这四个特征来确定它是哪一种花试利用这四个特征来确定它是哪一种花。一一朵
18、朵花花的的四四个个特特征征,需需要要4 4个个输输入入神神经经元元,每每个个数数值值代代表表花花朵朵一一种种特特征征的的具具体体数数值值。当当输输出出层层为为一一个个神神经经元元时时,可可以以根根据据输输出出的的数数字字确确定定花花朵朵的的类类型型。如如果果输输出出层层是是多多个个神神经经元元,我我们们可可以以使使用用每每一一个个输输出出神神经经元元代代表表一种类型的花,这种方法被称为一种类型的花,这种方法被称为one-hotone-hot。图图3-13 3-13 One-hot One-hot 编码示意图编码示意图One-hotOne-hot是是一一种种常常用用的的输输出出层层编编码码方方法
19、法。例例如如,我我们们一一共共有有三三种种花花,则则网网络络的的输输出出层层包包含含有有3 3个个神神经经元元,如图如图3-133-13所示。所示。3-5 3-5 梯度下降梯度下降我我们们希希望望寻寻找找到到一一个个算算法法,能能够够自自动动地地调调整整神神经经网网络络的的权权重重和和偏偏置置,让让网网络络的的输输出出y(x)y(x)能能够够拟拟合合所所有有的的训训练练输输入入x x。但但是是如如何何衡衡量量希希望望输输出出与与实实际际输输出出之之间间的的偏偏差差呢呢?为为此此引引入入代代价价函函数数(Cost Cost FunctionFunction)的概念,也叫的概念,也叫损失函数损失函
20、数(Loss FunctionLoss Function)或)或目标函数目标函数。定义如下的代价函数,也被称为二次代价函数:定义如下的代价函数,也被称为二次代价函数:3.5.1 3.5.1 代价函数代价函数(3-3-1212)其其中中,w w为为网网络络中中的的权权重重,b b为为网网络络中中的的偏偏置置,n n是是训训练练输输入入数数据据的的个数个数,y(xy(x)表表示目标输出示目标输出,a a代代表当输入表当输入为为x x时时网络的实际输出网络的实际输出。我我们们把把式式(3-123-12)称称为为二二次次代代价价函函数数,也也被被称称为为均均方方误误差差或或者者MSEMSE。代价函数具
21、有如下性质:代价函数具有如下性质:非负性;非负性;所比较的两个函数数值越接近,代价函数值就越小(最小化)。所比较的两个函数数值越接近,代价函数值就越小(最小化)。那那么么为为什什么么要要引引入入代代价价函函数数呢呢?直直接接最最大大化化正正确确分分类类的的数数量量不不是是更更好吗,何必去最小化好吗,何必去最小化个代价函数这样的间接评估量呢个代价函数这样的间接评估量呢?在在神神经经网网络络中中,通通过过调调整整权权重重和和偏偏置置直直接接进进行行正正确确分分类类的的函函数数并并不不是是个个平平滑滑的的函函数数,也也就就是是说说对对权权重重和和偏偏置置做做出出微微小小的的变变动动不不会会直接影响正
22、确分类的数量。而用一个平滑的代价函数效果会更明显直接影响正确分类的数量。而用一个平滑的代价函数效果会更明显。代代价价函函数数C(w,b)C(w,b)是是由由w w,b b这这两两个个变变量量决决定定的的,如如图图3-143-14所所示示。我我们们的的目目的的是是找找到到它它的的全全局局最最小小值值。通通常常代代价价函函数数是是个个复复杂杂的的多多元元函函数,只通过简单观察或计算很难直接找到最小值。数,只通过简单观察或计算很难直接找到最小值。3.5.2 3.5.2 梯度下降梯度下降图图3-14 3-14 C(w,b)C(w,b)示示意图意图神神经经网网络络可可能能依依赖赖大大量量的的权权重重和和
23、偏偏置置,极极其其复复杂杂。把把代代价价函函数数看看做做是是一一个个山山脉脉,包包含含有有海海拔拔高高度度(势势能能)不不同同的的山山峰峰和和山山谷谷,而而把把某某一一时时刻刻求求得得的的函函数数值值看看作作是是一一个个可可以以跳跳动动的的“皮皮球球”。我我们们让让这这个个球球体体不不断断地地在在山山脉脉中中跳跳动动,而而随随着着它它的的跳跳动动势势能能会会逐逐渐渐下下降降,直直到到它它跳跳落落到到整整个个山山脉脉中中海海拔拔最最低低的的谷谷底底(全全局局最最小小值)。值)。那那么么如如何何用用数数学学形形式式来来抽抽象象出出“球球体体”不不断断跳跳落落的的过过程程呢呢?其其实实就就是是让让函
24、数值逐渐减少,也就是函数的变化值始终为负即可:函数值逐渐减少,也就是函数的变化值始终为负即可:结合二次代价函数的定义公式(结合二次代价函数的定义公式(3-12),得到),得到(3-3-1313)(3-3-1414)(3-3-1515)根据梯度的定义根据梯度的定义:(3-3-1616)利用式(利用式(3-15)和式()和式(3-16),式(),式(3-14)可被重写为)可被重写为:带入式(带入式(3-17)可得)可得(3-3-1717)(3-3-1818)(3-3-1919)(3-3-2020)这这就就是是我我们们希希望望得得到到的的规规则则。通通过过式式(3-21),可可以以持持续续减减小小C
25、值值直直到获得到获得个全局最小值。个全局最小值。(3-3-2121)图图3-15 3-15 梯度下降梯度下降示示意图意图由由式式(3-15)和和式式(3-21)得得到到了了如如下下所所示示的的权权重重和和偏偏置置这这两两个个参参数数的更新方法:的更新方法:(3-3-2222)在在神神经经网网络络中中,代代价价函函数数C C是是个个关关于于所所有有权权重重和和偏偏置置的的多多元元函函数数,因因此此是是在在个个高高维维空空间间定定义义了了个个超超平平面面。而而当当面面临临有有多多极极值值函函数数时,梯度下降法可能会陷入局部最优而非全局最优时,梯度下降法可能会陷入局部最优而非全局最优。(3-3-23
26、23)3-3-6 6 反向传播反向传播BPBP在在前前一一节节介介绍绍了了参参数数的的更更新新原原理理,通通过过梯梯度度下下降降法法可可以以更更新新神神经经网网络络的的参参数数。那那么么对对于于拥拥有有多多层层的的复复杂杂神神经经网网络络,它它是是如如何何更更新新每每一一层层的的参参数数呢?实际上是通过呢?实际上是通过反向传播反向传播(Back PropagationBack Propagation,BPBP)算法来解决的)算法来解决的。当当我我们们使使用用前前馈馈神神经经网网络络接接收收输输入入x并并产产生生输输出出y(x)时时,信信息息是是通通过过网网络络由由输输入入顺顺次次向向输输出出流
27、流动动。输输入入x提提供供初初始始信信息息,然然后后传传播播到到每每一一层层的的隐隐藏藏单单元元,最最终终产产生生输输出出y(x)。这这就就是是前前向向传传播播(ForwardPropagation)。在训练过程中,前向传播可以持续地向前直到产生一个代价函在训练过程中,前向传播可以持续地向前直到产生一个代价函数数。与与此此相相反反,反反向向传传播播(BP)算算法法允允许许代代价价函函数数的的信信息息通通过过网网络络由由输输出出向向输入方向进行反向流动,以此来计算梯度。输入方向进行反向流动,以此来计算梯度。3.6.1 3.6.1 多层神经网络的数学表示多层神经网络的数学表示图图3-16 3-16
28、 神经网络参数神经网络参数A A图图3-17 3-17 神经网络参数神经网络参数B B这样,前面讨论过的式(这样,前面讨论过的式(3-6)就可以改写为)就可以改写为在前向传播中,前一层神经网络的激活值将作为下一层神经元的输在前向传播中,前一层神经网络的激活值将作为下一层神经元的输入。用向量的方式简化上式:入。用向量的方式简化上式:令令(3-3-2424)(3-3-2525)(3-3-2626)得到得到(3-3-2727)因此,代价函数表达式可以写成因此,代价函数表达式可以写成(3-3-2828)其中其中,N N为为神经网络的总层数。神经网络的总层数。3.6.2 3.6.2 反向传播算法原理反向
29、传播算法原理反向传播算法的四个重要的基本公反向传播算法的四个重要的基本公式式:我我们们通通过过代代价价函函数数一一步步步步地地调调整整每每一一层层的的参参数数,最最终终达达到到使使代代价价函函数数达达到到最最小小的的目目的的。值值得得注注意意的的是是,当当某某一一个个参参数数发发生生变变化化后后,它它后后面面许许多多的参数也会随之变化。通过展开一个权重的偏微分可以理解这个现象:的参数也会随之变化。通过展开一个权重的偏微分可以理解这个现象:(3-3-2929)3-3-7 7 实现简单神经网络实现简单神经网络我我们们利利用用以以TensorFlowTensorFlow作作为为基基础础的的Keras
30、Keras框框架架来来实实现现一一个个简简单单的的神神经经网网络。在这个示例中,鸢尾花的数据集如图络。在这个示例中,鸢尾花的数据集如图3-183-18所所示。示。鸢鸢尾尾花花数数据据集集由由150150个个样样本本构构成成,共共有有三三种种鸢鸢尾尾花花。每每一一条条样样本本记记录录了了花花萼萼的的长长度度、宽宽度度,花花瓣瓣的的长长度度、宽宽度度。在在使使用用之之前前,我我们们可可 以以 把把 三三 种种 鸢鸢 尾尾 花花 中中 的的“setosa”“setosa”类类 标标 记记 为为 0 0,“versicolorversicolor”标标 记记 为为 1 1,“virginicavirg
31、inica”类标记为类标记为2 2。图图3-18 3-18 鸢尾花数据集鸢尾花数据集现在构建神经网络。现在构建神经网络。#导入全部所需要的导入全部所需要的库库importnumpyasnpimportpandasaspdfromkerasimportoptimizersfromkeras.modelsimportSequentialfromkeras.layersimportDensefromkeras.wrappers.scikit_learnimportKerasClassifierfromkeras.utilsimportnp_utilsfromsklearn.model_selecti
32、onimporttrain_test_split,cross_val_scorefromsklearn.preprocessingimportLabelEncoderfromkeras.layers.coreimportDense,Activation#导导入入数数据据文文件件iris.csv(鸢鸢尾尾花花数数据据集集可可以以通通过过本本书书作作者者或或者者从从百百度度文文库库等等获获取取)。读读取取路路径径在在Windows环环境境下下建建议议使使用用双双斜斜杠杠。假假设设数数据据文文件保存在了计算机件保存在了计算机D盘的盘的DLsample文件夹内。文件夹内。dataframe=pd.re
33、ad_csv(D:DLsampleiris.csv,header=None)#读取指定文件中的数据读取指定文件中的数据dataset=dataframe.values#读取指定文件中的第读取指定文件中的第0列至第列至第4列列X=dataset:,0:4.astype(float)#指定第指定第4列为标签列为标签Y=dataset:,4#将标签转化为将标签转化为one-hot形式形式encoder=LabelEncoder()encoded_Y=encoder.fit_transform(Y)dummy_y=np_utils.to_categorical(encoded_Y,3)#共三类,因此参
34、数设为共三类,因此参数设为3,即用三个神经元代表三种不同类型的花,即用三个神经元代表三种不同类型的花#显示读取的数据以及转化后的标签显示读取的数据以及转化后的标签print(X)print(dummy_y)#构建模型构建模型model=Sequential()#全连接层,全连接层,4维输入,神经元个数为维输入,神经元个数为10,激活函数为,激活函数为ReLu,首层必须声首层必须声明输入的维数明输入的维数model.add(Dense(input_dim=4,units=10,activation=relu)model.add(Dense(units=5,activation=relu)#定义输
35、出层,由于采用定义输出层,由于采用one-hot形式,因此对应着三种类型,输出层采形式,因此对应着三种类型,输出层采用用3个神经元个神经元model.add(Dense(output_dim=3,activation=softmax)#编译模型编译模型pile(loss=mean_squared_error,#定义损失函数为均方差optimizer=rmsprop,#定义优化器metrics=accuracy)#定义评估方式为显示识别率#显示模型显示模型model.summary()#训练模型训练模型#X为输入,为输入,dummy_y为目标输出,迭代次数为为目标输出,迭代次数为500,验证集比
36、例为,验证集比例为20%#注意这里的验证集是全部数据集的后注意这里的验证集是全部数据集的后20%,与训练集完全独立,与训练集完全独立model.fit(X,dummy_y,epochs=500,batch_size=1,validation_split=0.2)运行后可以看到读取的数据:运行后可以看到读取的数据:图图3-19 3-19 读取到的数据读取到的数据经过编码的标签正是经过编码的标签正是one-hot形式:形式:图图3-20 3-20 编编码为码为one-hot形式标签形式标签可以看到网络的结构以及参数个数可以看到网络的结构以及参数个数:图图3-21 3-21 显示的网络结构与参数个数
37、显示的网络结构与参数个数如如图图3-223-22所所示示,在在训训练练过过程程中中显显示示出出来来的的训训练练样样本本个个数数120120(Train Train on on 120 120 samplessamples)和和验验证证样样本本个个数数3030(validate validate on on 30 30 samplessamples)都都与与我我们们之之前前设设定定的的80%80%,20%20%相相符符合合。模模型型开开始始训训练练后后将将显显示示每每一一次次迭迭代代所所用用时时间间(ms/stepms/step)、损损失失(lossloss)、训训练练集集识识别别精精度度(ac
38、cacc)、验验证证集集损损失(失(val_lossval_loss)、验证集精度()、验证集精度(val_accval_acc):):我我们们可可以以在在keras中中调调用用Tensorboard画画图图来来观观察察模模型型的的性性能能,例例如如构构造造数据流图以及训练过程的识别精度。数据流图以及训练过程的识别精度。图图3-22 3-22 显显训练过程训练过程#调用调用Tensorboardmodel.fit(X,dummy_y,epochs=10,batch_size=1,validation_split=0.2,callbacks=TensorBoard(log_dir=./log_d
39、ir)待训练完成后,在终端中输入:待训练完成后,在终端中输入:Tensorboard-logdir=./log_dir此时,终端会显示相应的地址:此时,终端会显示相应的地址:图图3-23 3-23 Tensorboard地址地址图图3-24 3-24 Tensorboard绘绘制的数据流图制的数据流图然后将终端显示的地址输入浏览器,即可看见我们利用然后将终端显示的地址输入浏览器,即可看见我们利用tensorboard绘制绘制的一系列图像。例如数据流图如图的一系列图像。例如数据流图如图3-24所所示。示。数据流图与我们上面所构造的神经网络相匹配,共三层全连接层。数据流图与我们上面所构造的神经网络
40、相匹配,共三层全连接层。图图3-25 3-25 Tensorboard展示训练过程展示训练过程同同样样我我们们也也可可以以看看到到其其训训练练过过程程中中的的损损失失(loss)与与验验证证集集识识别别精精度度(val_acc)等,如图)等,如图3-25所所示。示。我们也可以在我们也可以在keras中画出训练过程中模型在验证集和训练集上表现的中画出训练过程中模型在验证集和训练集上表现的图像。此时,我们需要导入新的库:图像。此时,我们需要导入新的库:#内嵌绘图内嵌绘图%matplotlibinlineimportmatplotlibimportmatplotlib.pyplotasplt在代码的
41、末尾记录训练过程,并画图:在代码的末尾记录训练过程,并画图:history=model.fit(X,dummy_y,epochs=400,batch_size=1,validation_split=0.2)print(history.history.keys()plt.plot(history.historyacc)plt.plot(history.historyval_acc)plt.title(modelaccuracy)plt.ylabel(accuracy)plt.xlabel(epoch)plt.legend(train,test,loc=upperleft)plt.show()最后可以同时得到训练和验证图像。最后可以同时得到训练和验证图像。图图3-26 3-26 Keras展示训练过程展示训练过程通通过过观观察察验验证证集集与与训训练练集集上上的的识识别别精精度度可可以以预预防防过过拟拟合合现现象象的的发发生生。因因此此,通通常常在在训训练练的的过过程程中中我我们们都都要要画画出出这这个个图图像像进进行行观观察察,以以保保障障模型的可靠性。模型的可靠性。