问题背景:
在运行《深度学习入门》第六章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版权协议,转载请附上原文出处链接和本声明。