FCM hebbian学习算法

问题描述

我对https://www.sciencedirect.com/science/article/pii/S1568494604001012中提出的非黑边学习算法的再现结果有一些疑问 我写了整个类来计算仿真,但是我猜这个问题必须很简单,因为它是简单的数学,应该是可重现的

  1. 我正在创建2d节点值数组和3d权重数组(每个步骤我在一个维中为权重添加1个2d矩阵,在节点中为新值添加1行)
  2. 我更新边缘值(只是开始时不为零的那些值)2
  3. 我更新节点的值(通过sigmoid函数“标准化”它们) 1

链接1和2指向方程式摘要

n-学习率,为0.04 伽玛0.98 nhb是一门课程,但太大了,无法发布所有内容。看来问题出在这里,我会很感激找到它的帮助,sign是sign function:)

边缘是有组织的,因此行是源节点,列是目标节点,例如W [2,1,3]将是第3次迭代中从节点2到节点4的边的值。 A [3,1]将是第4次迭代中节点2的值。

@H_502_16@ for step in range(100): nhb.next_step() # updating A for i in range(nConcept): A = nhb.A[-2,i] + np.dot(nhb.A[-2],nhb.W[-2,:,i]) nhb.A[-1,i] = nhb.sigmoid(A,1) # updating W for row in range(nConcept): # source for col in range(nConcept): # target if (row == col) or (nhb.W[0,row,col] == 1): continue nhb.W[-1,col] = nhb.gamma * nhb.W[-2,col] + nhb.n * nhb.A[-2,col] * (nhb.A[-2,row] - nhb.sign(nhb.W[-2,col]) * nhb.A[-2,col] * nhb.W[-2,col]) # nhb.update_edge(row,col,option=1)

节点和边的初始值在文章中有所描述,但

@H_502_16@W_init = np.asarray([[0,-0.4,-0.25,0.3],[0.36,0],[0.45,[-0.9,[0,0.6,0.3,0]]) A0 = np.asarray([[0.4,0.7077,0.6120,0.7171,0.3]])

然后在第17步之后应该是:

@H_502_16@W_final =np.asarray([ [0,-0.1736,-0.0265,0.479],[0.5103,[0.5753,[-0.90,0.707,0.493,0]])

当我离我很近但仍然不在的时候

@H_502_16@W = np.asarray([[ 0.,-0.24525467,-0.0690278,0.,0.44435492],[ 0.51393603,0. ],[ 0.55661828,[-0.83920385,[ 0.,0.68916266,0.46529029,0. ]])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)