首页 / 知识
Python实现BP神经网络
2023-11-12 13:31:00
首先实现几个工具函数:
defrand(a,b):
return(b-a)*random.random()+a
defmake_matrix(m,n,fill=0.0):#创造一个指定大小的矩阵
mat=[]
foriinrange(m):
mat.append([fill]*n)
returnmat
定义sigmod函数和它的导数:
defsigmoid(x):
return1.0/(1.0+math.exp(-x))
defsigmod_derivate(x):
returnx*(1-x)
定义BPNeuralNetwork类,使用三个列表维护输入层,隐含层和输出层神经元,列表中的元素代表对应神经元当前的输出值.使用两个二维列表以邻接矩阵的形式维护输入层与隐含层,隐含层与输出层之间的连接权值,通过同样的形式保存矫正矩阵.
定义setup方法初始化神经网络:
defsetup(self,ni,nh,no):
self.input_n=ni+1
self.hidden_n=nh
self.output_n=no
#initcells
self.input_cells=[1.0]*self.input_n
self.hidden_cells=[1.0]*self.hidden_n
self.output_cells=[1.0]*self.output_n
#initweights
self.input_weights=make_matrix(self.input_n,self.hidden_n)
self.output_weights=make_matrix(self.hidden_n,self.output_n)
#randomactivate
foriinrange(self.input_n):
forhinrange(self.hidden_n):
self.input_weights[i][h]=rand(-0.2,0.2)
forhinrange(self.hidden_n):
foroinrange(self.output_n):
self.output_weights[h][o]=rand(-2.0,2.0)
#initcorrectionmatrix
self.input_correction=make_matrix(self.input_n,self.hidden_n)
self.output_correction=make_matrix(self.hidden_n,self.output_n)
定义predict方法进行一次前馈,并返回输出:
defpredict(self,inputs):
#activateinputlayer
foriinrange(self.input_n-1):
self.input_cells[i]=inputs[i]
#activatehiddenlayer
forjinrange(self.hidden_n):
total=0.0
foriinrange(self.input_n):
total+=self.input_cells[i]*self.input_weights[i][j]
self.hidden_cells[j]=sigmoid(total)
#activateoutputlayer
forkinrange(self.output_n):
total=0.0
forjinrange(self.hidden_n):
total+=self.hidden_cells[j]*self.output_weights[j][k]
self.output_cells[k]=sigmoid(total)
returnself.output_cells[:]
定义back_propagate方法定义一次反向传播和更新权值的过程,并返回最终预测误差:
defback_propagate(self,case,label,learn,correct):
#feedforward
self.predict(case)
#getoutputlayererror
output_deltas=[0.0]*self.output_n
foroinrange(self.output_n):
error=label[o]-self.output_cells[o]
output_deltas[o]=sigmod_derivate(self.output_cells[o])*error
#gethiddenlayererror
hidden_deltas=[0.0]*self.hidden_n
forhinrange(self.hidden_n):
error=0.0
foroinrange(self.output_n):
error+=output_deltas[o]*self.output_weights[h][o]
hidden_deltas[h]=sigmod_derivate(self.hidden_cells[h])*error
#updateoutputweights
forhinrange(self.hidden_n):
foroinrange(self.output_n):
change=output_deltas[o]*self.hidden_cells[h]
self.output_weights[h][o]+=learn*change+correct*self.output_correction[h][o]
self.output_correction[h][o]=change
#updateinputweights
foriinrange(self.input_n):
forhinrange(self.hidden_n):
change=hidden_deltas[h]*self.input_cells[i]
self.input_weights[i][h]+=learn*change+correct*self.input_correction[i][h]
self.input_correction[i][h]=change
#getglobalerror
error=0.0
foroinrange(len(label)):
error+=0.5*(label[o]-self.output_cells[o])**2
returnerror
定义train方法控制迭代,该方法可以修改最大迭代次数,学习率λ,矫正率μ三个参数.
deftrain(self,cases,labels,limit=10000,learn=0.05,correct=0.1):
foriinrange(limit):
error=0.0
foriinrange(len(cases)):
label=labels[i]
case=cases[i]
error+=self.back_propagate(case,label,learn,correct)
编写test方法,演示如何使用神经网络学习异或逻辑:
deftest(self):
cases=[
[0,0],
[0,1],
[1,0],
[1,1],
]
labels=[[0],[1],[1],[0]]
self.setup(2,5,1)
self.train(cases,labels,10000,0.05,0.1)
forcaseincases:
print(self.predict(case))
以上内容为大家介绍了Python实现BP神经网络,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
python的调用绑定方法和非绑定方法
python的调用绑定方法和非绑定方法,代码,方法,实例,第一,培训,时计,奇数,偶数,参数,定义,在Python中,如果用实例去调用方法,这种限制就被称为PyPython网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tcPython 3.6 中针对文件系统的神奇
Python 3.6 中针对文件系统的神奇方法,数字,代码,数据,标准,信息,培训,首次,工作,文件名,常数,Python3.6首次发布于2016年,尽管它已经发布了很Python 之模块重载的五种方法
Python 之模块重载的五种方法,环境,培训,方法,模块,文件夹,例子,下面,内容,语句,请看,python环境准备新建一个foo文件夹,其下包含一个bar.py文使用Python的toolz库开始函数式编
使用Python的toolz库开始函数式编程,代码,函数,培训,位置,参数,字典,顺序,操作,结果,测试,toolz库允许你操作函数,使其更容易理解,更容易测试代为什么Python没有main函数?
为什么Python没有main函数?,入口,代码,灵活,函数,培训,状态,统一,项目,网上,名称,毫无疑问,Python中没有所谓的主入口函数,但是互联网上经常有文提升Python数据分析能力的方法
提升Python数据分析能力的方法,分析,数据,工具,代码,时间,环境,报告,信息,培训,标准,1.Pandas分析包这个工具的好处是显而易见的。下面的动画Python内置函数
Python内置函数,数字,函数,培训,位置,第一,代码,异常,数据,公式,序列,python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好python之什么是函数式编程?
python之什么是函数式编程?,系统,概念,项目,大规模,状态,数据,培训,函数,语言,副作用,函数式编程(简称FP)是一种编程范式,其中最基本的元素是Python的函数式
Python的函数式,名称,术语,概念,培训,函数,变量,对象,参数,希腊字母,赋值,尽管Python并不是以函数式为主的语言,但对它来说支持函数式编程也相Python中字典合并的实现方法
Python中字典合并的实现方法,培训,结果,以上,版本,字典,方法,函数,下面,背景,发现,TableofContents背景Methon1:适用于Python3.5及以上版本呢M学习python的三种方法
学习python的三种方法,项目,代码,公司,时间,工程,培训,中级,初级,资料,第一,Python的用途十分广泛,不同的程序员将其用于不用的领域,不同的程序