Ненормализация данных PyTorch - PullRequest
0 голосов
/ 12 октября 2018

Ниже кода:

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 голосов
/ 20 февраля 2019

F.normalize просто делится на норму в соответствии с документацией , поэтому вам просто нужно умножить ее на ее величину.

Это означает, что вам все еще нужен доступ квеличина исходного вектора 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.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...