You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中RuntimeWarning数值溢出等错误的解决方法

修复Jupyter Notebook中的RuntimeWarning(溢出与无效值)

首先,先把你的代码和报错信息整理清楚:

你的训练代码:

for i in range(0,train_len):
    avg = (x1[i] + x2[i] + x3[i] + x4[i])/4
    h = x0*w0 + x1[i]*w1 + x2[i]*w2 + x3[i]*w3 + x4[i]*w4
    error = avg - h
    w0 = w0 + n*error
    w1 = w1 + n*x1[i]*error
    w2 = w2 + n*x2[i]*error
    w3 = w3 + n*x3[i]*error
    w4 = w4 + n*x4[i]*error

报错信息:

C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: RuntimeWarning: overflow encountered in double_scalars
  This is separate from the ipykernel package so we can avoid doing imports until
C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:5: RuntimeWarning: invalid value encountered in double_scalars
  """
C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in double_scalars
  
C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:7: RuntimeWarning: invalid value encountered in double_scalars
  import sys
C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in double_scalars
  
C:\Users\Md. Arif Ahmed\Anaconda3\lib\site-packages\ipykernel_launcher.py:9: RuntimeWarning: invalid value encountered in double_scalars
  if __name__ == '__main__':

问题原因分析

这些警告的核心是数值溢出:

  1. 第一个overflow encountered说明计算中某个值超出了Python双精度浮点数的范围,变成了inf(无穷大)或者-inf。
  2. 后续的invalid value则是因为inf/nan参与了后续的权重计算,导致结果变成无效值。

通常触发这种问题的常见场景有三个:

  • 学习率n设置得太大,每次权重更新的幅度过猛,直接把数值推到溢出。
  • 输入特征x0、x1、x2、x3、x4没有做归一化/标准化,不同特征量级差异大或者本身数值过大,放大了权重更新的影响。
  • 初始权重w0-w4设置得不合理(比如初始值太大),后续计算很快失控。

具体修复方案

按优先级尝试以下方法:

1. 调小学习率

这是最常见的解决办法。如果你的学习率n是0.1以上的数值,先试着改成0.01、0.001甚至更小,逐步找到一个能让数值稳定的范围。比如:

n = 0.001  # 替换你原来的学习率值

2. 对输入特征做归一化/标准化

把所有输入特征的数值缩放到一个小范围,能从根源上避免因数据量级导致的权重爆炸。常用的两种方法:

  • Min-Max归一化(缩放到0-1):
    import numpy as np
    # 对每个特征单独处理
    x0 = (x0 - x0.min()) / (x0.max() - x0.min())
    x1 = (x1 - x1.min()) / (x1.max() - x1.min())
    x2 = (x2 - x2.min()) / (x2.max() - x2.min())
    x3 = (x3 - x3.min()) / (x3.max() - x3.min())
    x4 = (x4 - x4.min()) / (x4.max() - x4.min())
    
  • Z-score标准化(均值为0,方差为1):
    x0 = (x0 - x0.mean()) / x0.std()
    x1 = (x1 - x1.mean()) / x1.std()
    # 其他特征同理
    

3. 合理初始化权重

不要给初始权重设置过大的值,用小随机数初始化是常规操作:

import numpy as np
w0 = np.random.randn() * 0.01
w1 = np.random.randn() * 0.01
w2 = np.random.randn() * 0.01
w3 = np.random.randn() * 0.01
w4 = np.random.randn() * 0.01

4. 添加权重正则化(可选)

如果前面的方法还不够,给权重更新加上正则项,限制权重的增长:

lambda_reg = 0.0001  # 正则系数,从小值开始试
w0 = w0 + n*error - n*lambda_reg*w0
w1 = w1 + n*x1[i]*error - n*lambda_reg*w1
w2 = w2 + n*x2[i]*error - n*lambda_reg*w2
w3 = w3 + n*x3[i]*error - n*lambda_reg*w3
w4 = w4 + n*x4[i]*error - n*lambda_reg*w4

5. 检查输入数据是否异常

确认你的输入数据里有没有本身就存在的nan或者inf,这些会直接导致计算出错:

print("x1是否有异常值:", np.any(np.isnan(x1)) or np.any(np.isinf(x1)))
# 对其他x2、x3、x4、x0做同样检查

如果有异常值,先清理数据(比如用均值填充异常样本,或者直接删除)。


验证修改

调整完之后重新运行代码,观察警告是否消失。如果还有问题,可以再进一步调小学习率,或者增加正则系数,直到数值稳定下来。

内容的提问来源于stack exchange,提问作者Arif Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:29:40