【问题标题】:Implementing Oja's Learning rule in Hopfield Network using python使用 python 在 Hopfield 网络中实现 Oja 的学习规则
【发布时间】:2018-01-28 09:45:59
【问题描述】:

我正在按照这篇论文在python中实现Oja的学习规则

Oja's Learning Rule

u = 0.01
V = np.dot(self.weight , input_data.T)
print(V.shape , self.weight.shape , input_data.shape) #(625, 2) (625, 625) (2, 625)

到目前为止,我能够按照论文进行操作,但是在从链接到达最终方程时,我遇到了 numpy 数组维度不匹配错误,这似乎是意料之中的。这是最终方程的代码

self.weight += u * V * (input_data.T - (V * self.weight)

如果我这样分解:

u = 0.01
V = np.dot(self.weight , input_data.T)
temp = u * V  #(625, 2)
x = input_data - np.dot(V.T , self.weight)   #(2, 625)
k = np.dot(temp , x)   #(625, 625)
self.weight = np.add(self.weight , k , casting = 'same_kind')

这清除了尺寸限制,但答案模式有一点错误(我只是在修复尺寸顺序时很清楚结果会不正确)。我想知道我对等式的解释在第一种方法中是否正确,这似乎是这样做的合乎逻辑的方式。对正确实施方程式有什么建议吗?

【问题讨论】:

    标签: python-3.x neural-network recurrent-neural-network unsupervised-learning


    【解决方案1】:

    我已根据此链接Oja Rule 实施了规则。我得到的结果类似于 hebbian 学习规则。所以我不太确定实施的正确性。但是发布它以便任何寻找实现的人都可以获得一些想法并在错误时更正代码

    u = 0.01
    V = np.dot(self.weight , input_data.T)
    i = 0
    
    for inp in input_data:
        v = V[ : , i].reshape((n_features , 1))  #n_features is # of columns
        self.weight += (inp * v) - u * np.square(v) * self.weight
        i += 1
    

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2015-05-05
      相关资源
      最近更新 更多