我正在研究 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 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
我认为问题是self.e_grad_w
一个ndarray
of 形状(2,)
,它进一步包含两个ndarray
具有 2d 形状的附加s,而不是直接包含数据。这似乎是在 中初始化的e_grad_initializer
,其中nabla_w
具有相同的结构。我一直没有追踪这是从哪里来的,但我相信一旦你解决了这个问题,问题就会得到解决。
添加回答
举报
0/150
提交
取消