Как мне выполнить одно горячее кодирование по определенному измерению с помощью PyTorch?

#python #pytorch #tensor #one-hot-encoding

Вопрос:

У меня есть тензор размера [3, 15, 136] , где:

  • 3 is batch size
  • 15 - sequence length и
  • 136 is tokens

Я хочу разогреть свой тензор, используя вероятности в tokens измерении (136). Для этого я хочу извлечь размер маркеров для каждой буквы в последовательности длины и указать 1 максимально возможную и пометить все остальные маркеры как 0 .

Ответ №1:

Для этого вы можете использовать one_hot функцию PyTorch:

 import torch.nn.functional as F

t = torch.rand(3, 15, 136)

F.one_hot(t.argmax(dim=2), 136)
 

Комментарии:

1. Спасибо! Кажется, это работает для меня за одним исключением. Я замаскировал свой тензор перед этой операцией, поэтому, таким образом, дополненные буквы имеют 0 во всем измерении. И каким-то образом F.one_hot(torch.argmax(t, dim=2), 136) выбирает первый 0, чтобы быть единицей. Должен ли я замаскировать его еще раз после «argmax»?

2. @julliet да, если существует несколько максимальных значений (например, все равно 0), то argmax возвращает индекс первого максимального значения (т. е. первого элемента).

3. Я могу нанести маскировку там еще раз после argmax , это правильно?

4. @julliet да 🙂