FCM hebbian学习算法

时间:2020-09-17 23:08:19

标签: python machine-learning math fuzzy

我对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的值。

    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,row,col] = nhb.gamma * nhb.W[-2,row,col] + nhb.n * nhb.A[-2,col] * 
                (nhb.A[-2,row] - nhb.sign(nhb.W[-2,row,col]) * nhb.A[-2,col] * nhb.W[-2,row,col])
    #             nhb.update_edge(row,col,option=1)
                
       

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

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

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

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

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

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

 

0 个答案:

没有答案