代码:x.norm(p=2,dim=1,keepdim=True)
功能:求指定维度上的范数。
函数原型:【返回输入张量给定维dim 上每行的p范数】
torch.norm(input, p, dim, out=None,keepdim=False) → Tensor
注:范数求法:【对N个数据求p范数】
||x||p=p次根号下 (x1的p次幂 + x2的p次幂 + x3的p次幂 + …)
input (Tensor) – 输入张量
p (float) – 范数计算中的幂指数值
dim (int) – 缩减的维度,dim=0是对0维度上的一个向量求范数,返回结果数量等于其列的个数,也就是说有多少个0维度的向量, 将得到多少个范数。dim=1同理。
out (Tensor, optional) – 结果张量
keepdim(bool)– 保持输出的维度 。当keepdim=False时,输出比输入少一个维度(就是指定的dim求范数的维度)。
而keepdim=True时,输出与输入维度相同,仅仅是输出在求范数的维度上元素个数变为1。这也是为什么有时
我们把参数中的dim称为缩减的维度,因为norm运算之后,此维度或者消失或者元素个数变为1。
import torchinputs=torch.tensor([[ 1., 2., 3., 4.],[ 2., 4., 6., 8.],[ 3., 6., 9., 12.]])
print(inputs.shape)#torch.Size([3, 4])
inputs1 = torch.norm(inputs, p=2, dim=1, keepdim=True)
print(inputs1)
torch.Size([3, 4])==》torch.Size([3, 1])
tensor([[ 5.4772],
[10.9545],
[16.4317]])
求解过程:dim=1即就是在4个数的维度上进行求范数
5.4772 = 2√ ̄(12+22+32+42)
10.9545 = 2√ ̄(22+42+62+82)
16.4317=2√ ̄(32+62+92+122)
inputs2 = torch.norm(inputs, p=2, dim=0, keepdim=True)
print(inputs2)
torch.Size([3, 4])==》torch.Size([1, 4])
tensor([[ 3.7417, 7.4833, 11.2250, 14.9666]])
计算过程:dim=0,即就是在3行的维度上进行纵向求解,在哪个维度上,输出结构哪个维度将会变成1
3.7417 = 2√ ̄(12+22+3^2)
7.4833 = 2√ ̄(22+42+6^2)
11.2250 = 2√ ̄(32+62+9^2)
14.9666 = 2√ ̄(42+82+12^2)