使用 Python 的 AdaDelta 优化算法

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


守着星空守着你
浏览 298回答 1
1回答

肥皂起泡泡

我认为问题是self.e_grad_w一个ndarrayof 形状(2,),它进一步包含两个ndarray具有 2d 形状的附加s,而不是直接包含数据。这似乎是在 中初始化的e_grad_initializer,其中nabla_w具有相同的结构。我一直没有追踪这是从哪里来的,但我相信一旦你解决了这个问题,问题就会得到解决。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python