PyTorch数据的非标准化

PyTorch数据的非标准化,pytorch,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,

以下代码:

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.]])


有各种资源详细说明了此过程,例如但没有详细说明
F.normalize的非规范化结果。normalize

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

这意味着您仍然需要访问原始向量的幅值
ux
,否则,这是不可能的,因为无法从规范化向量恢复有关幅值的信息

以下是如何做到这一点:

#我修改了输入以使其更有趣,但您可以使用任何其他值
ux=torch.tensor(np.array([[255,1255],[101,10123]]).float()
震级=ux.norm(p=2,dim=1,keepdim=True)#新
ux=F.标准化(ux,p=2,dim=1)
ux_orig=ux*震级#新
打印(ux_原版)
#产出:
#张量([[255,1,255.],
#         [101.,  10., 123.]])
tensor([[ 0.7071,  0.0028,  0.7071],
        [ 0.7071,  0.0028,  0.7071]])