
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.8 线性神经网络
3.8.1 线性神经网络介绍
线性神经网络跟单层感知器非常类似,只是把单层感知器的sign激活函数改成了purelin函数:

purelin函数也称为线性函数,如图3.9所示。

图3.9 purelin函数
3.8.2 线性神经网络分类案例
参考“单层感知器案例”,我们这次使用线性神经网络来完成相同的任务。线性神经网络的程序跟单层感知器的程序非常相似,大家可以思考一下需要修改哪些地方。
大家可以仔细阅读代码3-4,找到修改了的部分。
代码3-4:线性神经网络案例



运行结果如下:

线性神经网络的程序有两处对单层感知器程序进行了修改。
第一处是在train()函数中,将“Y=np.sign(np.dot(X,W))”改成了“Y=np.dot(X,W)”。因为线性神经网络的激活函数是y=x,所以这里就不需要“np.sign()”了。
第二处是在for i in range(100)中,把原来的:


改成了:

在单层感知器中,当y=t时,Δw就会为0,模型训练就结束了,所以可以提前跳出循环。单层感知器使用的模型收敛条件是两次迭代模型的权值已经不再发生变化,此时则可以认为模型收敛。
而在线性神经网络中,y会一直逼近t的值,但一般不会得到等于t的值,所以可以对模型不断进行优化。线性神经网络使用的模型收敛条件是设置一个最大迭代次数,当训练了一定次数后就可以认为模型收敛了。
对比单层感知器和线性神经网络所得到的结果,我们可以看得出线性神经网络所得到的结果会比单层感知器得到的结果更理想。但是线性神经网络也还不够优秀,当使用它处理非线性问题的时候,它就不能很好地完成工作了。