torch.sum((x-y)**2)与torch.norm(x-y,p=2)结果差异咨询
关于张量L2范数与平方和结果差异的解释
你这俩结果根本没差异,是一回事儿——L2范数的定义就是张量所有元素平方和的算术平方根。
你算的torch.sum((disk-disk2)**2)得到224,这是差值张量所有元素的平方总和;而torch.norm(..., p=2)做的就是对这个平方和开根号的操作:√224 ≈ 14.966,和你得到的范数结果完全对应。
可以跑这段代码验证:
import torch def generate_disk(width, height, radius): x,y = torch.linspace(-1, 1, width),torch.linspace(-1, 1, height) X, Y = torch.meshgrid(x, y) distance = torch.sqrt(X**2 + Y**2) disk = (distance <= radius).float() return disk disk = generate_disk(50,50,0.2).unsqueeze(0) disk2 = generate_disk(50,50,0.4).unsqueeze(0) diff = disk - disk2 sum_sq = torch.sum(diff**2) l2_norm = torch.norm(diff, p=2) print(f"平方和: {sum_sq.item()}") print(f"L2范数: {l2_norm.item()}") print(f"平方和开根号: {torch.sqrt(sum_sq).item()}")
输出里torch.sqrt(sum_sq)和l2_norm的数值会完全一致,仅可能因浮点数精度存在可忽略的细微差异。
说白了,你看到的不是差异,是L2范数计算过程中两个不同阶段的结果——一个是平方和,一个是平方和开根号,本质是同一计算的前后步骤。
内容的提问来源于stack exchange,提问作者Cantor
相关产品推荐
相关产品推荐

