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

问题背景:
在运行《深度学习入门》第六章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)

版权声明:本文为zxc0074869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。