我在研究AdaDelta优化算法,所以我尝试用Python实现它,但是我的代码有问题,因为我得到了以下错误:
attributeerror:“numpy.ndarray”对象没有属性“sqrt”
我没有找到导致那个错误的原因。根据消息,这是因为这行代码:rms_grad = np.sqrt(self.e_grad + epsilon)
这条线类似于这个等式:RMS[g]t=√E[g^2]t+ϵ
我得到了本文中算法的核心方程:http://ruder.io/optimizing-gradient-descent/index.html#adadelta
还有一个细节:我正在初始化E[g^2]t
矩阵,如下所示:self.e_grad = (1 - mu)*np.square(nabla)
纳布拉是梯度。类似于这个等式:E[g2]t = γE[g2]t−1 + (1−γ)g2t
(第一个项在第一次迭代中等于零,就像上面的代码行一样)
所以我想知道我是用错误的方法初始化E矩阵,还是做平方根不合适我试图使用pow()
函数,但它不起作用如果有人能帮我,我会非常感激,我已经试了好几个星期了。
Andersource要求的其他详细信息:
这是github上的全部源代码:https://github.com/pedrovbeltran/neural-networks-and-deep-learning/blob/experimental/modified-networks/network2_with_adadelta.py。
最佳答案
我认为问题在于self.e_grad_w
是形状ndarray
的(2,)
而不是直接包含数据,它进一步包含了另外两个带有2d形状的ndarray
s。这似乎是在e_grad_initializer
中初始化的,其中nabla_w
具有相同的结构。我不知道这是从哪里来的,但我相信一旦你解决了这个问题,这个问题就会得到解决。
关于python - 使用Python的AdaDelta优化算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54081448/