使用 python 在 Hopfield 网络中实施 Oja 的学习规则

Implementing Oja's Learning rule in Hopfield Network using python

我正在按照这篇论文在 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)

到目前为止,我能够按照论文进行操作,但是在从 link 得出最终方程时,我 运行 出现了 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')

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

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

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