非规范化PyTorch数据

时间:2018-10-12 19:00:52

标签: pytorch

下面的代码:

ux = torch.tensor(np.array([[255,1,255],[255,1,255]])).float()

print(ux)

ux = F.normalize(ux, p=2, dim=1)

print(ux)

打印:

tensor([[ 255.,    1.,  255.],
        [ 255.,    1.,  255.]])
tensor([[ 0.7071,  0.0028,  0.7071],
        [ 0.7071,  0.0028,  0.7071]])

如何将ux归一化以返回值

tensor([[ 255.,    1.,  255.],
        [ 255.,    1.,  255.]])

来自

tensor([[ 0.7071,  0.0028,  0.7071],
        [ 0.7071,  0.0028,  0.7071]])

有许多资源详细介绍了此过程,例如https://discuss.pytorch.org/t/simple-way-to-inverse-normalize-a-batch-of-input-variable/12385/3,但没有详细介绍F.normalize的非规范化结果

1 个答案:

答案 0 :(得分:1)

F.normalize只是根据documentation除以范数,因此您只需要将其乘以其大小即可。

这意味着您仍然需要访问原始矢量ux 的大小,否则,这是不可能的,因为有关幅度的信息无法从原始向量中恢复。归一化向量

这是可以完成的方法:

# I modified the input to make it more interesting, but you can use any other value
ux = torch.tensor(np.array([[255,1,255],[101,10,123]])).float()

magnitude = ux.norm(p=2, dim=1, keepdim=True)    # NEW
ux = F.normalize(ux, p=2, dim=1)

ux_orig = ux * magnitude                         # NEW

print(ux_orig)
# Outputs:
# tensor([[255.,   1., 255.],
#         [101.,  10., 123.]])