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

被折叠的 条评论
为什么被折叠?



