pytorch中x.norm(p=2,dim=1,keepdim=True)的理解
代碼:x.norm(p=2,dim=1,keepdim=True)
功能:求指定維度上的范數。
函數原型:【返回輸入張量給定維dim?上每行的p范數】
? ? ? ? ? ? ? ? ?torch.norm(input, p, dim, out=None,keepdim=False) → Tensor
? ? ? ? ?注:范數求法:【對N個數據求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。
?
例子說明:
已知一個3×4矩陣,如下:
tensor([[ 1.,? 2.,? 3.,? 4.],
??????? [ 2.,? 4.,? 6.,? 8.],
??????? [ 3.,? 6.,? 9., 12.]])
1)dim參數,分別對其行和列分別求2范數:
inputs1 = torch.norm(inputs, p=2, dim=1, keepdim=True)
print(inputs1)
inputs2 = torch.norm(inputs, p=2, dim=0, keepdim=True)
print(inputs2)
結果分別為:
tensor([[ 5.4772],
??????? [10.9545],
??????? [16.4317]])
tensor([[ 3.7417,? 7.4833, 11.2250, 14.9666]])
2)keepdim參數
inputs3 = inputs.norm(p=2, dim=1, keepdim=False)
print(inputs3)
inputs3為:
tensor([ 5.4772, 10.9545, 16.4317])
?
輸出inputs1和inputs3的shape:
print(inputs1.shape)
print(inputs3.shape)
torch.Size([3, 1])
torch.Size([3])
可以看到inputs3少了一維,其實就是dim=1(求范數)那一維(列)少了,因為從4列變成1列,就是3行中求每一行的2范數,就剩1列了,不保持這一維不會對數據產生影響。或者也可以這么理解,就是數據每個數據有沒有用[]擴起來。
即:
keepdim = True,用[]擴起來;
keepdim = False,不用[]括起來;
?
【不寫keepdim,則默認不保留dim的那個維度】:
inputs4 = torch.norm(inputs, p=2, dim=1)
print(inputs4)
tensor([ 5.4772, 10.9545, 16.4317])
?
【不寫dim,則計算Tensor中所有元素的2范數】:
inputs5 = torch.norm(inputs, p=2)
print(inputs5)
tensor(20.4939)
等價于這句話:
inputs6 = inputs.pow(2).sum().sqrt()
print(inputs6)
tensor(20.4939)
總之,norm操作后dim這一維變為1或者消失。
總結
以上是生活随笔為你收集整理的pytorch中x.norm(p=2,dim=1,keepdim=True)的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css三个块元素重叠,CSS盒模型以及如
- 下一篇: 在c语言中我叫做符号变量,问渠网-C语言