python bp神经网络的库_Python_BP神经网络实现

Python_BP神经网络实现(鸢尾花分类测试)

简介

人工神经网络模型种类很多,其中根据网络内数据流向进行分类可以分为前馈网络、反馈网络和自组织网络。

通过对Andrew

Ng的深度学习课程的学习,本文总结其中浅层神经网络一章的知识点(本文重点不在于公式讲解,而是算法的简单实现,具体理论可看——深度学习工程师)。在此介绍和利用Python实现BP神经网络,BP神经网络是一种典型的前馈神经网络。

结构

BP神经网络分为三层分别是输入层、隐层和输出层,其中隐层的层数可以扩展,且每一层的神经元个数也可以增减。每一层中神经元与前后层神经元相连接,但是同一层神经元之间无连接。可看下方示意图。

原理

当我们使用BP神经网络来对数据进行分类或者预测的时候,每对有连接的神经元之间都有一个权重,记为w;同时还有偏移量,记为b。每个神经元中还有一个激活函数,记为σ(x),要注意的是这不是一个函数,有多个函数可以作为激活函数:Sigmoid、tanh、Relu等。

在每一次迭代计算中,正向运算(输入层开始),我们会计算出一个值,然后计算出该值与标准值的误差;反向运算(输出层开始),按照减小误差方向,修正各连接权。通过一次次的迭代计算,直到误差减小到给定的极小值,就可以结束迭代,完成训练。

Python实现思路

通过python实现BP神经网络,主要有以下几个步骤:

神经网络结构确定

权重和偏移量参数初始化

正向传播计算

成本函数计算

反向传播计算

权重和偏移量参数更新

鸢尾花分类测试

既然已经完成了这个BP神经网络模型,现在就可以来试试效果。在这里我们用鸢尾花的分类来检测这个模型的可用性。

简介

Iris数据集是常用的分类实验数据集,由Fisher,

1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

属性:

Sepal.Length(花萼长度),单位是cm;

Sepal.Width(花萼宽度),单位是cm;

Petal.Length(花瓣长度),单位是cm;

Petal.Width(花瓣宽度),单位是cm;

种类:

Iris Setosa(山鸢尾)(本例中使用数字‘0’表示)

Iris Versicolour(杂色鸢尾)(本例中使用数字‘1’表示)

Iris Virginica(维吉尼亚鸢尾)(本例中使用数字‘2’表示)

测试程序

测试结果

测试中,将150个数划分成了90个训练数据,60个测试数据。神经网络的中间层为10个神经元,迭代次数为10000次,学习率为0.25。在训练和测试中,需要对数据进行归一化,其中包括对标签数据Y的归一化,原来,我设置的三类鸢尾花的标签分别是0,1,2。通过归一化之后,获得的标签数据为0,0.5,1。对测试集获得的结果,进行归档,小于0.2的为0,大于0.8的为1,其余的均为0.5。最终获得的分类结果的准确率为98.3%。

写在最后

由于代码无法贴上,详细内容欢迎访问我的博客:

https://blog.csdn.net/q_quanting/article/details/80657174

还有不足,欢迎交流。

你可能感兴趣的:(python,bp神经网络的库)