#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 да 🙂