Python 实现多层前向神经网络

一层中加权求和,根据非线性方程进行转化输出;理论上,若是有足够多的隐藏层和足够大的训练集,能够模拟出任何方程;算法



2、设计神经网络结构api


使用神经网络以前,必需要肯定神经网络的层数,以及每层单元的个数;网络


为了加速学习过程,特征向量在传入输入层前,一般须要标准化到0和1之间;机器学习


离散型变量能够被编码成每个输入单元对应一个特征值可能赋的值函数


好比:特征值A可能去三个值(a0,a1,a2),那么可使用3个输入单元来表明A学习

  • 若是A=a0,则表明a0的单元值取1,其他取0;测试

  • 若是A=a1,则表明a1的单元值取1,其他取0;ui

  • 若是A=a2,则表明a2的单元值取1,其他取0;编码



神经网络既解决分类(classification)问题,也能够解决回归(regression)问题。对于分类问题,若是是两类,则能够用一个输出单元(0和1)分别表示两类;若是多余两类,则每个类别用一个输出单元表示,因此输出层的单元数量一般等一类别的数量。spa


没有明确的规则来设计最佳个数的隐藏层,通常根据实验测试偏差和准确率来改进实验。


3、交叉验证方法


如何计算准确率?最简单的方法是经过一组训练集和测试集,训练集经过训练获得模型,将测试集输入模型获得测试结果,将测试结果和测试集的真实标签进行比较,获得准确率。


在机器学习领域一个经常使用的方法是交叉验证方法。一组数据不分红2份,可能分为10份,

  • 第1次:第1份做为测试集,剩余9份做为训练集;

  • 第2次:第2份做为测试集,剩余9份做为训练集;

  • ……


这样通过10次训练,获得10组准确率,将这10组数据求平均值获得平均准确率的结果。这里10是特例。通常意义上将数据分为k份,称该算法为K-fold cross validation,即每一次选择k份中的一份做为测试集,剩余k-1份做为训练集,重复k次,最终获得平均准确率,是一种比较科学准确的方法。



4、BP算法


经过迭代来处理训练集中的实例;


对比通过神经网络后预测值与真实值之间的差;


反方向(从输出层=>隐藏层=>输入层)来最小化偏差,来更新每一个链接的权重;


4.一、算法详细介绍


输入:数据集、学习率、一个多层神经网络构架;


输出:一个训练好的神经网络;


初始化权重和偏向:随机初始化在-1到1之间(或者其余),每一个单元有一个偏向;对于每个训练实例X,执行如下步骤:


一、由输入层向前传送:


结合神经网络示意图进行分析:



由输入层到隐藏层:



由隐藏层到输出层:



两个公式进行总结,能够获得:



Ij为当前层单元值,Oi为上一层的单元值,wij为两层之间,链接两个单元值的权重值,sitaj为每一层的偏向值。咱们要对每一层的输出进行非线性的转换,示意图以下:



当前层输出为Ij,f为非线性转化函数,又称为激活函数,定义以下:



即每一层的输出为:



这样就能够经过输入值正向获得每一层的输出值。


二、根据偏差反向传送 对于输出层:其中Tk是真实值,Ok是预测值



对于隐藏层:



权重更新:其中l为学习率



偏向更新:



三、终止条件


  • 偏重的更新低于某个阈值;

  • 预测的错误率低于某个阈值;

  • 达到预设必定的循环次数;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------