首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyTorch中向量的范数、1范数和2范数的正确计算方法是什么?

PyTorch中向量的范数、1范数和2范数的正确计算方法是什么?
EN

Stack Overflow用户
提问于 2021-07-22 18:17:02
回答 2查看 11.4K关注 0票数 2

我有一个矩阵:

代码语言:javascript
运行
复制
t = torch.rand(2,3)
print(t)
>>>tensor([[0.5164, 0.3651, 0.0882],
        [0.4488, 0.9824, 0.4067]])

我正在遵循对规范的介绍,并希望在PyTorch中尝试。

似乎:

  • 向量的norm是“向量的大小或长度是描述空间中向量范围的非负数,有时被称为向量的大小或范数”
  • 1-Norm是“绝对向量值之和,其中标量的绝对值使用表示法x-A1。实际上,范数是从向量空间原点到曼哈顿距离的计算。”
  • 2-Norm是“向量坐标与向量空间原点的距离,L2范数是平方向量值之和的平方根”。

我目前只知道这一点:

代码语言:javascript
运行
复制
print(torch.linalg.norm(t, dim=1))
>>>tensor([0.6385, 1.1541])

但是我不知道这里的三个范数(范数、1范数、2范数)中哪一个在计算,以及如何计算其余的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-22 18:46:41

要计算0-、1-和2-范数,可以使用torch.linalg.norm,分别提供ord参数(012 )。或者直接放在张量上:Tensor.norm,带有p参数。以下是三个变体:手动计算、使用torch.linalg.norm和使用Tensor.norm

  • 0-范数x.norm(dim=1,p=0) >>> torch.linalg.norm(x,dim=1,ord=0) >>> x.ne(0).sum(dim=1)
  • 1-范数x.norm(dim=1,p=1) >>> torch.linalg.norm(x,dim=1,ord=1) >>> x.abs().sum(dim=1)
  • 2-规范x.norm(dim=1,p=2) >>> torch.linalg.norm(x,dim=1,ord=2) >>> x.pow(2).sum(dim=1).sqrt()
票数 9
EN

Stack Overflow用户

发布于 2021-07-22 18:45:09

要计算不同顺序的范数,只需用所需的顺序传递一个ord参数即可。例如:

  • torch.linalg.norm(t, dim=1, ord = 0)应该为norm工作。
  • torch.linalg.norm(t, dim=1, ord = 1)应该适用于1-Norm.
  • torch.linalg.norm(t, dim=1, ord = 2)应该适用于2-Norm. 诸若此类。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68489765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档