首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numpy true除法中遇到溢出

在numpy true除法中遇到溢出
EN

Stack Overflow用户
提问于 2020-08-06 13:02:01
回答 1查看 46关注 0票数 0

我正在尝试用python从头开始实现动量梯度下降。在实现指数加权平均的偏差校正时,我遇到了一个运行时警告:“在numpy true除法中遇到溢出”。我正在尝试用一个非常小的浮点数来划分一个numpy数组(在代码部分中提供)。

代码语言:javascript
复制
for i in range(1, len(self.layers)):
            self.dvw['dvw'+str(i)] = (self.beta1*self.dvw['dvw'+str(i)] + (1-self.beta1)*self.dw['dw'+str(i)])
            self.dvb['dvb'+str(i)] = (self.beta1*self.dvb['dvb'+str(i)] + (1-self.beta1)*self.db['db'+str(i)])
            self.dvw['dvw'+str(i)] = self.dvw['dvw'+str(i)].astype('float')
            self.dvb['dvb'+str(i)] = self.dvb['dvb'+str(i)].astype('float')
            self.dvw['dvw'+str(i)] = np.divide(self.dvw['dvw'+str(i)], (1-np.power(self.beta1, t))) # encounterd error in this line
            self.dvb['dvb'+str(i)] = np.divide(self.dvb['dvb'+str(i)], (1-np.power(self.beta1, t))) # and this line aswell

dvw和dvb都是以numpy数组的值作为值的字典。beta1值为0.9,t为实数

EN

回答 1

Stack Overflow用户

发布于 2020-08-06 13:31:22

尝试通过添加以下内容来提高代码的数值稳定性:

代码语言:javascript
复制
eps=1e-6
for i in range(1, len(self.layers)):
    self.dvw['dvw'+str(i)] = (self.beta1*self.dvw['dvw'+str(i)] + (1-self.beta1)*self.dw['dw'+str(i)])
    self.dvb['dvb'+str(i)] = (self.beta1*self.dvb['dvb'+str(i)] + (1-self.beta1)*self.db['db'+str(i)])
    self.dvw['dvw'+str(i)] = self.dvw['dvw'+str(i)].astype('float')
    self.dvb['dvb'+str(i)] = self.dvb['dvb'+str(i)].astype('float')
    self.dvw['dvw'+str(i)] = np.divide(self.dvw['dvw'+str(i)], (eps + 1-np.power(self.beta1, t)))
    self.dvb['dvb'+str(i)] = np.divide(self.dvb['dvb'+str(i)], (eps + 1-np.power(self.beta1, t)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63277137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档