преобразование тензора в один горячо закодированный тензор индексов - PullRequest
1 голос
/ 09 июня 2019

У меня есть тензор формы моего ярлыка (1,1,128,128,128), в котором значения могут варьироваться от 0,24. Я хочу преобразовать это в один горячий закодированный тензор, используя функцию nn.fucntional.one_hot

n = 24
one_hot = torch.nn.functional.one_hot(indices, n)

но это ожидает тензор индексов, честно говоря, я не уверен, как их получить. Единственный тензор, который у меня есть, это тензор метки формы, описанной выше, и он содержит значения в диапазоне 1-24, а не индексы

Как я могу получить тензор от моего тензора? Заранее спасибо.

1 Ответ

0 голосов
/ 10 июня 2019

Если ошибка, которую вы получаете, это:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
RuntimeError: one_hot is only applicable to index tensor.

Может быть, вам просто нужно конвертировать в int64:

import torch

# random Tensor with the shape you said
indices = torch.Tensor(1, 1, 128, 128, 128).random_(1, 24)
# indices.shape => torch.Size([1, 1, 128, 128, 128])
# indices.dtype => torch.float32

n = 24
one_hot = torch.nn.functional.one_hot(indices.to(torch.int64), n)
# one_hot.shape => torch.Size([1, 1, 128, 128, 128, 24])
# one_hot.dtype => torch.int64

Вы также можете использовать indices.long().

...