我正在关注本文以在python中实现Oja的学习规则
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')
这清除了尺寸约束,但是拉伸的答案模式是错误的(我只是知道维度订单,知道结果不正确)。我想知道在第一种方法中我对方程的解释是否正确,这似乎是合乎逻辑的方法。有关正确实施等式的任何建议吗?
答案 0 :(得分:0)
我已根据此链接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