如何解决Python中的RuntimeWarning: invalid value encountered in double_scalars问题

本文探讨了在运行《深度学习入门》中batch_norm_test.py遇到的RuntimeWarning,重点在于如何修正因矩阵运算导致的数据溢出问题,通过调整权重衰减计算方式来避免溢出。作者建议先乘系数再求和,以确保数值稳定性。

问题背景:
在运行《深度学习入门》第六章batch_norm_test.py文件时遇到了以下的警告
警告
RuntimeWarning: overflow encountered in square

weight_decay += 0.5 * self.weight_decay_lambda * np.sum(W**2)

RuntimeWarning: invalid value encountered in double_scalars

weight_decay += 0.5 * self.weight_decay_lambda * np.sum(W**2)

源文件中程序如下:

        weight_decay = 0
        for idx in range(1, self.hidden_layer_num + 2):
            W = self.params['W' + str(idx)]
            weight_decay += 0.5 * self.weight_decay_lambda * np.sum(W**2)

观察式子可以理解,是前面两个数字乘以np.sum(W**2),而np.sum(W**2)的含义是矩阵W乘方后再对矩阵所有元素求和,这样可能会使得矩阵元素和过大从而导致数据溢出。因为numpy是基于C语言,不像python本身就有极高的精度。

综上所述改成先直接乘系数,再求和即可,如下所示:

weight_decay += np.sum(W * 0.5 * self.weight_decay_lambda * W)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值