实战——离散Hopfield神经网络的实现
来源:互联网 发布:怎样做淘宝客赚钱手机 编辑:程序博客网 时间:2024/06/09 17:55
Hopfield神经网络简介
一种循环神经网络,主要用于联想记忆。离散Hopfield网络是一个单层网络,有n个神经元节点,每个神经元的输出均接到其它神经元的输入。各节点没有自反馈。每个节点都可处于一种可能的状态(1或-1),即当该神经元所受的刺激超过其阀值时,神经元就处于一种状态(比如1),否则神经元就始终处于另一状态(比如 -1)。
关于Hopfield网络的详细介绍,请看维基百科:Hopfield神经网络
Hopfield神经网络的实现
1.根据Hebb学习规则计算神经元之间的连接权值
def calcWeight(savedsample): N = len(savedsample[0]) P = len(savedsample) mat = [0]*N returnMat = [] for i in range(N): m = mat[:] returnMat.append(m) for i in range(N): for j in range(N): if i==j: continue sum = 0 for u in range(P): sum += savedsample[u][i] * savedsample[u][j] returnMat[i][j] = sum/float(N) return returnMat
2.根据神经元的输入计算神经元的输出(静态突触)
def calcXi(inMat , weighMat): returnMat = inMat choose = [] for i in range(len(inMat)/5): #随机改变N/5个神经元的值,该参数可调,也可同时改变所有神经元的值 choose.append(random.randint(0,len(inMat)-1)) for i in choose: sum = 0 for j in range(len(inMat)): sum += weighMat[i][j] * inMat[j] if sum>=0: returnMat[i] = 1 else: returnMat[i] = -1 return returnMat
假设计算第t次循环后神经元的输出时,输入的参数inMat表示第t-1次循环后神经元的输出。即用上一次循环的输出做本次循环的输入。
测试结果
记忆样本,4个5x5的矩阵(来源于网络,分别表示字母N,E,R,0):
sample = [[1,-1,-1,-1,1, 1,1,-1,-1,1, 1,-1,1,-1,1, 1,-1,-1,1,1, 1,-1,-1,-1,1], [1,1,1,1,1, 1,-1,-1,-1,-1, 1,1,1,1,1, 1,-1,-1,-1,-1, 1,1,1,1,1], [1,1,1,1,-1, 1,-1,-1,-1,1, 1,1,1,1,-1, 1,-1,-1,1,-1, 1,-1,-1,-1,1], [-1,1,1,1,-1, 1,-1,-1,-1,1, 1,-1,-1,-1,1, 1,-1,-1,-1,1, -1,1,1,1,-1]]
加噪函数,在记忆样本的基础上增加30%的噪声:
def addnoise(mytest_data,n): for x in range(n): for y in range(n): if random.randint(0, 10) > 7: mytest_data[x * n + y] = -mytest_data[x * n + y] return mytest_data
标准输出函数:
def regularout(data,N): for j in range(N): ch = "" for i in range(N): ch += " " if data[j*N+i] == -1 else "X" print ch
测试代码及结果:
regularout(sample[1],5)test = addnoise(sample[1],5)regularout(test,5)for i in range(2000): test = calcXi(test,weightMatregularout(test,5)
从上到下,第一张为记忆样本、第二张为加噪的记忆样本、第三张为循环2000次后回忆出的结果
3 0
- 实战——离散Hopfield神经网络的实现
- 离散Hopfield神经网络的联想记忆
- 离散型Hopfield神经网络
- 离散Hopfield神经网络
- 神经网络6--离散Hopfield神经网络
- 【神经网络学习笔记】基于离散Hopfield神经网络的数字识别
- C++实现基于离散Hopfield神经网络噪声数字的识别_智能计算作业三
- 什么是离散的Hopfield网络?
- 外积法设计离散型 Hopfield 神经网络的权系数矩阵_资料整理
- 外积法设计离散型 Hopfield 神经网络的权系数矩阵_资料整理
- 离散型Hopfield神经网络在联想和识别上的应用
- Hopfield神经网络的通俗理解
- 如何利用离散Hopfield神经网络进行数字识别(1)
- 如何利用离散Hopfield神经网络进行数字识别(2)
- 神经网络系列讲解之离散型Hopfield网络
- 神经网络系列讲解之离散型Hopfield网络
- MATLAB神经网络编程(九)——Hopfield网络
- Hopfield神经网络
- LeetCode (Minimum Path Sum)
- min_free_kbytes2
- SRTP 同态加密笔记
- rebase -i 编辑、删除的使用
- C++ Hook(钩子)编程,通过内联汇编,使类成员函数代替全局函数(静态函数)
- 实战——离散Hopfield神经网络的实现
- php 接口token生成验证
- C++内存分布与虚指针
- python线程池库threadpool使用实例
- Android 微信Tinker三分钟接入七分钟原理 让你成为热修复牛人
- java以某一编码方式读取CSV
- 机器学习实战笔记(二)
- golang程序版本管理
- buffer cache 深度解析