使用Python的AdaDelta优化算法

时间:2019-01-07 20:31:28

标签: python algorithm optimization

我正在研究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)

其中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

1 个答案:

答案 0 :(得分:0)

我认为问题在于self.e_grad_w是形状为ndarray的{​​{1}},它还包含两个附加的具有二维形状的(2,),而不是直接包含数据。这似乎是在ndarray中初始化的,其中e_grad_initializer具有相同的结构。我没有一直追溯到哪里,但是我相信一旦您解决了这个问题,问题就可以解决。