Python神经网络代码详细介绍.pdfVIP

  • 7
  • 0
  • 约2.71千字
  • 约 2页
  • 2023-06-06 发布于上海
  • 举报
Python神经⽹络代码详细介绍 import numpy import scipy.special #想要使⽤S函数,必须导⼊这个包 #完整的神经⽹络代码 class neuralNetwork: def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): #初始化神经⽹络 self.inodes=inputnodes #输⼊层节点数 self.hnodes=hiddennodes #隐藏层节点数 self.onodes=outputnodes #输出层节点数⽬ #创建两个链接权重矩阵 #正太分布的中⼼设定为0.0,使⽤下⼀层节点数的开⽅作为标准⽅差来初始化权重,即pow(self.hnodes,-0.5),最后⼀个参数是numpy数组的形状⼤⼩ self.wih=numpy.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes)) self.who=numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes)) #或者可以选择简单⼀点的创建链接权重矩阵的⽅法 #self.wih=(numpy.random.rand(self.hnodes,self.inodes)-0.5) #self.who=(numpy.random.rand(self.onodes,self.hnodes)-0.5) #减去0.5得到-0.5—0.5之间的权重 self.lr=learningrate #学习率 self.activation_function=lambda x:scipy.special.expit(x) #使⽤lambda来创建函数,这个函数接受了x ,返回scipy.special.expit(x),这就是S函数(激活函数) #使⽤lambda创建的函数是没有名字的,⼀般称其为匿名函数,这⾥给它分配了⼀个名字activation_function(),因此,当想要使⽤S函数时,调⽤这个函数即可 pass def train(self,inputs_list,targets_list):#target_list⽬标值 #训练⽹络,反向传播误差 #训练⽹络分两个部分:针对给定的训练样本输出,这与query()函数上所做内容没什么区别;将计算得到的输出与所需输出对⽐,使⽤差值来指导⽹络权重的更新 inputs=numpy.array(inputs_list,ndmin=2).T #将输⼊的列表转换为矩阵并且转置,数组的维度是2(2维数组表⽰矩阵) target=numpy.array(targets_list,ndmin=2).T #将targets_list变成numpy数组(维度为2),也即是矩阵 hidden_inputs=numpy.dot(self.wih,inputs) hidden_output=self.activation_function(hidden_inputs) final_inputs=numpy.dot(self.who,hidden_output) final_outputs=self.activation_function(final_inputs) # 以上部分与query()部分使⽤完全相同的⽅式从输⼊层前馈信号到最终输出层 output_errors=targets-final_outputs #输出层输出误差为预期⽬标输出值与实际计算得到的输出值的差 hidden_errors=numpy.dot(self.who.T,output_errors) #计算隐藏层节点反向传播的误差:隐藏层与输出层之间链接权重的转置点乘输出层输出误差,为隐藏层输出误差 #对于在隐藏层和输出层之间的权重,我们使⽤output_errors进⾏优化。 #对于输⼊层和隐藏层之间的权重,我们使⽤计算得到的hidden_errors进⾏优化 self.who+=self.lr*numpy.dot((output_errors*finia

文档评论(0)

1亿VIP精品文档

相关文档