【问题标题】:Un-normalizing PyTorch data非标准化 PyTorch 数据
【发布时间】:2019-02-20 18:27:57
【问题描述】:

以下代码:

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 的非规范化结果

【问题讨论】:

    标签: pytorch


    【解决方案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.]])
    

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2020-05-06
      • 2021-09-23
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2017-01-20
      • 2018-12-19
      相关资源
      最近更新 更多