torch.norm参数定义
torch版本1.6
def norm(input, p="fro", dim=None, keepdim=False, out=None, dtype=None)
input
input (Tensor): the input tensor 输入为tensor
p
p (int, float, inf, -inf, 'fro', 'nuc', optional): the order of norm. Default: ``'fro'``The following norms can be calculated:===== ============================ ==========================ord matrix norm vector norm===== ============================ ==========================None Frobenius norm 2-norm'fro' Frobenius norm --'nuc' nuclear norm --Other as vec norm when dim is None sum(abs(x)**ord)**(1./ord)===== ============================ ==========================
dim是matrix norm
如果input是matrix norm
,也就是维度大于等于2维,则
P值默认为fro
,Frobenius norm
可认为是与计算向量的欧氏距离类似
有时候为了比较真实的矩阵和估计的矩阵值之间的误差
或者说比较真实矩阵和估计矩阵之间的相似性,我们可以采用 Frobenius 范数。
计算矩阵的Frobenius norm (Frobenius 范数),就是矩阵A各项元素的绝对值平方的总和再开根号
p='nuc’
时,是求核范数,核范数是矩阵奇异值的和。核范数的具体定义为
例子来源:机器学习 | Schatten范数 - 知乎
p=other
时,当作vec norm计算,p为int的形式,则是如下形式:
详细解释:torch.norm()函数的用法 - 知乎
dim是vector norm
p=none
时,为L2 Norm,也是属于P范数一种,pytorch
调用的函数是F.normalize
,pytorch
官网定义如下:
dim
dim (int, 2-tuple of ints, 2-list of ints, optional): If it is an int,vector norm will be calculated, if it is 2-tuple of ints, matrix normwill be calculated. If the value is None, matrix norm will be calculatedwhen the input tensor only has two dimensions, vector norm will becalculated when the input tensor only has one dimension. If the inputtensor has more than two dimensions, the vector norm will be applied tolast dimension.
如果dim
为None
, 当input的维度只有2维时使用matrix norm
,当input的维度只有1维时使用vector norm
,当input的维度超过2维时,只在最后一维上使用vector norm
。
如果dim
不为None
,1.dim
是int类型,则使用vector norm
,如果dim
是2-tuple int类型,则使用matrix norm
.
Keepdim
keepdim (bool, optional): whether the output tensors have :attr:`dim`retained or not. Ignored if :attr:`dim` = ``None`` and:attr:`out` = ``None``. Default: ``False``
keepdim
为True,则保留dim指定的维度,如果为False,则不保留。默认为False
out
out (Tensor, optional): the output tensor. Ignored if:attr:`dim` = ``None`` and :attr:`out` = ``None``.
输出为tensor,如果dim
= None
and out
= None
.则不输出
dtype
dtype (:class:`torch.dtype`, optional): the desired data type ofreturned tensor. If specified, the input tensor is casted to:attr:'dtype' while performing the operation. Default: None.
指定输出的数据类型
示例
>>> import torch
>>> a = torch.arange(9, dtype= torch.float) - 4
>>> a
tensor([-4., -3., -2., -1., 0., 1., 2., 3., 4.])
>>> b = a.reshape((3, 3))
>>> b
tensor([[-4., -3., -2.],[-1., 0., 1.],[ 2., 3., 4.]])
>>> torch.norm(a)
>tensor(7.7460)
>>>计算流程: math.sqrt((4*4 + 3*3 + 2*2 + 1*1 + -4*-4 + -3*-3 + -2*-2 + -1*-1))
7.7460
>>> torch.norm(b) # 默认计算F范数
tensor(7.7460)