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

为什么执行均值方差归一化后Numpy与PyTorch的输出结果有差异?

问题根因

你遇到的NumPy与PyTorch计算结果不一致的问题,核心原因是两个库计算标准差的默认参数不同:

  • NumPy的std()方法默认ddof=0,计算总体标准差,分母为样本数N
  • PyTorch的std()方法默认unbiased=True(等价于ddof=1),计算无偏样本标准差,分母为样本数N-1

修复方案

只需统一两边的标准差计算逻辑即可,推荐在PyTorch调用std时指定无偏计算关闭,和NumPy默认逻辑对齐,修改后的normalize函数如下:

def normalize(x, bsize, eps=1e-6):
    nc = x.shape[1]
    if nc % bsize != 0:
        raise Exception(f'Number of columns must be a multiple of bsize')
    x = x.reshape(-1, bsize)
    m = x.mean(1).reshape(-1, 1)
    # 针对PyTorch张量指定unbiased=False,和NumPy默认计算逻辑对齐
    if isinstance(x, torch.Tensor):
        s = x.std(1, unbiased=False).reshape(-1, 1)
    else:
        s = x.std(1).reshape(-1, 1)
    n = (x - m) / (eps + s)
    n = n.reshape(-1, nc)
    return n

也可以选择修改NumPy侧的std调用为x.std(1, ddof=1),和PyTorch默认逻辑对齐,可根据你的业务计算需求选择对齐方向。

验证效果

修改后再次运行测试代码,abs(n1-n2).max()的输出会降到1e-7及以下,属于float32精度下的正常计算误差,无逻辑偏差。


内容的提问来源于stack exchange,提问作者Axeon Thra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:42:02