python绘制神经网络结构图,python搭建神经网络模型

Hopfield神经网络用python实现讲解?

神经网络结构具有以下三个特点:神经元之间全连接,并且为单层神经网络。每个神经元既是输入又是输出,导致得到的权重矩阵相对称,故可节约计算量。

在输入的激励下,其输出会产生不断的状态变化,这个反馈过程会一直反复进行。

假如Hopfield神经网络是一个收敛的稳定网络,则这个反馈与迭代的计算过程所产生的变化越来越小,一旦达到了稳定的平衡状态,Hopfield网络就会输出一个稳定的恒值。

Hopfield网络可以储存一组平衡点,使得当给定网络一组初始状态时,网络通过自行运行而最终收敛于这个设计的平衡点上。

当然,根据热力学上,平衡状态分为stable state和metastable state, 这两种状态在网络的收敛过程中都是非常可能的。为递归型网络,t时刻的状态与t-1时刻的输出状态有关。

之后的神经元更新过程也采用的是异步更新法(Asynchronous)。Hopfield神经网络用python实现。

谷歌人工智能写作项目:神经网络伪原创

如何用 Python 构建神经网络择时模型

import mathimport random(0)def rand(a,b): #随机函数return (b-a)*random.random()+adef make_matrix(m,n,fill=0.0):#创建一个指定大小的矩阵mat = []for i in range(m):mat.append([fill]*n)return mat#定义sigmoid函数和它的导数def sigmoid(x):return 1.0/((-x))def sigmoid_derivate(x):return x*(1-x) #sigmoid函数的导数class BPNeuralNetwork:def __init__(self):#初始化变量self.input_n = 0self.hidden_n = 0self.output_n = 0self.input_cells = []self.hidden_cells = []self.output_cells = []self.input_weights = []self.output_weights = []self.input_correction = []self.output_correction = []#三个列表维护:输入层,隐含层,输出层神经元def setup(self,ni,nh,no):self.input_n = ni+1 #输入层+偏置项self.hidden_n = nh #隐含层self.output_n = no #输出层#初始化神经元self.input_cells = [1.0]*self.input_nself.hidden_cells= [1.0]*self.hidden_nself.output_cells= [1.0]*self.output_n#初始化连接边的边权self.input_weights = make_matrix(self.input_n,self.hidden_n) #邻接矩阵存边权:输入层->隐藏层self.output_weights = make_matrix(self.hidden_n,self.output_n) #邻接矩阵存边权:隐藏层->输出层#随机初始化边权:为了反向传导做准备--->随机初始化的目的是使对称失效for i in range(self.input_n):for h in range(self.hidden_n):self.input_weights[i][h] = rand(-0.2 , 0.2) #由输入层第i个元素到隐藏层第j个元素的边权为随机值for h in range(self.hidden_n):for o in range(self.output_n):self.output_weights[h][o] = rand(-2.0, 2.0) #由隐藏层第i个元素到输出层第j个元素的边权为随机值#保存校正矩阵,为了以后误差做调整self.input_correction = make_matrix(self.input_n , self.hidden_n)self.output_correction = make_matrix(self.hidden_n,self.output_n)#输出预测值def predict(self,inputs):#对输入层进行操作转化样本for i in range(self.input_n-1):self.input_cells[i] = inputs[i] #n个样本从0~n-1#计算隐藏层的输出,每个节点最终的输出值就是权值*节点值的加权和for j in range(self.hidden_n):total = 0.0for i in range(self.input_n):total+=self.input_cells[i]*self.input_weights[i][j]# 此处为何是先i再j,以隐含层节点做大循环,输入样本为小循环,是为了每一个隐藏节点计算一个输出值,传输到下一层self.hidden_cells[j] = sigmoid(total) #此节点的输出是前一层所有输入点和到该点之间的权值加权和for k in range(self.output_n):total = 0.0for j in range(self.hidden_n):total+=self.hidden_cells[j]*self.output_weights[j][k]self.output_cells[k] = sigmoid(total) #获取输出层每个元素的值return self.output_cells[:] #最后输出层的结果返回#反向传播算法:调用预测函数,根据反向传播获取权重后前向预测,将结果与实际结果返回比较误差def back_propagate(self,case,label,learn,correct):#对输入样本做预测self.predict(case) #对实例进行预测output_deltas = [0.0]*self.output_n #初始化矩阵for o in range(self.output_n):error = label[o] - self.output_cells[o] #正确结果和预测结果的误差:0,1,-1output_deltas[o]= sigmoid_derivate(self.output_cells[o])*error#误差稳定在0~1内#隐含层误差hidden_deltas = [0.0]*self.hidden_nfor h in range(self.hidden_n):error = 0.0for o in range(self.output_n):error+=output_deltas[o]*self.output_weights[h][o]hidden_deltas[h] = sigmoid_derivate(self.hidden_cells[h])*error#反向传播算法求W#更新隐藏层->输出权重for h in range(self.hidden_n):for o in range(self.output_n):change = output_deltas[o]*self.hidden_cells[h]#调整权重:上一层每个节点的权重学习*变化+矫正率self.output_weights[h][o] += learn*change + correct*self.output_correction[h][o]#更新输入->隐藏层的权重for i in range(self.input_n):for h in range(self.hi

你可能感兴趣的:(python,神经网络,机器学习,算法)