如果我有一个尺寸为[a,b,c]的3D张量(变量)。 将它视为b * c矩阵,我希望所有这些矩阵得到行规范化。
答案 0 :(得分:6)
您可以使用normalize
功能。
import torch.nn.functional as f
f.normalize(input, p=2, dim=2)
dim=2
参数指示要标准化的维度(将每个行向量除以p-norm
。
答案 1 :(得分:1)
以下情况应该有效。
import torch
import torch.nn.functional as f
a, b, c = 10, 20, 30
t = torch.rand(a, b, c)
g = f.normalize(t.view(t.size(0), t.size(1) * t.size(2)), p=1, dim=1)
print(g.sum(1)) # it confirms the normalization
g = g.view(*t.size())
print(g) # get the normalized output vector of shape axbxc
答案 2 :(得分:0)
要将矩阵归一化为每行的总和为 1,只需除以每行的总和:
import torch
a, b, c = 10, 20, 30
t = torch.rand(a, b, c)
t = t / (torch.sum(t, 2).unsqueeze(-1))
print(t.sum(2))