Pytorch如何对3D Tensor(变量)中的每个矩阵进行行归一化?

时间:2017-11-21 06:18:14

标签: torch pytorch tensor

如果我有一个尺寸为[a,b,c]的3D张量(变量)。 将它视为b * c矩阵,我希望所有这些矩阵得到行规范化。

3 个答案:

答案 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))