离散型hopfield神经网络。参考自http://web.cs.ucla.edu/~rosen/161/notes/hopfield.html实现的草稿版本:

# http://web.cs.ucla.edu/~rosen/161/notes/hopfield.html

attractors = np.array([[0, 1, 1, 0, 1], [1, 0, 1, 0, 1]])
print('attractors:\n', attractors) weight_matrix = np.zeros((5, 5))
print('weight_matrix:\n', weight_matrix)
# 第一个向量表示第一个节点到各个节点的权值 # 初始化网络,权值是对称的,例如w12 = w21,而w11 w22都是0
# for i in range(len(weight_matrix)):
def reflect_about_the_diagonal(matrix):
# 将矩阵上三角翻转拷贝到下三角
matrix += matrix.T - np.diag(matrix.diagonal()) for attractor in attractors:
temp_matrix = np.zeros((5, 5))
for i in range(0, 4):
for j in range(i + 1, 5):
temp_matrix[i, j] = (2 * attractor[i] - 1) * (2 * attractor[j] - 1)
weight_matrix += temp_matrix reflect_about_the_diagonal(weight_matrix)
print('weight_matrix:\n', weight_matrix) # print(weight_matrix[2].dot(attractors[0])) # 类似于bp里的预测,som里的map
def xxxx(input_vector):
vector = input_vector.copy() stable_state = False random_order = np.arange(len(attractors[0])) while not stable_state:
# 生成一个随机序列,以随机的顺序更新节点
np.random.shuffle(random_order)
stable_state = True
for i in random_order:
original_value = vector[i]
vector[i] = weight_matrix[i].dot(vector)
if (vector[i] >= 0):
vector[i] = 1
else:
vector[i] = 0
if (vector[i] != original_value):
print(i, "change ", original_value, '->', vector[i])
stable_state = False return vector x = [1, 1, 1, 1, 1]
print('test:', x, '->', xxxx(np.array(x)))

最新文章

  1. angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
  2. 【memcache缓存专题(2)】memcache安装与命令行使用
  3. 信息学院第九届ACM程序设计竞赛题解
  4. PHP生成数字+字符混合型字符串
  5. SpringMVC 拦截器(interceptors)对样式(css),JavaScript(js),图片(images)链接的拦截
  6. SQLServer 循环1百万插入测试数据
  7. servlet之过滤器(转载)
  8. Heap Operations(模拟题)
  9. java中方法传值小知识解析
  10. Rxjava + retrofit + dagger2 + mvp搭建Android框架
  11. UML图中类之间的关系
  12. Flask上下文管理、session原理和全局g对象
  13. L - Non-Prime Factors (质数筛选+因子分解)
  14. 【Spring学习】Spring的源码解析之路 ——【step1】基础环境配置 + IDEA快捷键整理
  15. java上传文件获取跟目录的办法
  16. C#设计模式 ---- 总结汇总
  17. c++命名空间---namespace
  18. [Laravel] 03 - DB facade, Query builder & Eloquent ORM
  19. Qt调用JS
  20. js网页上画图

热门文章

  1. su - 和su的区别
  2. DS1-2
  3. Marathon1.5以上版本配置
  4. Django 框架 数据库操作2
  5. 新发现:排序算法时间复杂度只有O(3n),命名为"wgw"排序法
  6. Vbox下的linux和windows共享文件设置
  7. 利用Tensorflow实现卷积神经网络模型
  8. 2sum,3sum,4sum,ksum
  9. Dockerfile详解(二)
  10. node.js初识08