下面的代码:
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
的非规范化结果
答案 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.]])