Согласно документам , padding_idx
дополняет вывод вектором внедрения на padding_idx
(инициализированном нулями) всякий раз, когда встречается с индексом.
Это означает, что там, где у вас есть элемент, равный padding_idx
, на выходе слоя внедрения с этим индексом будут все нули.
Вот пример: скажем, у вас есть вложение слов по 1000 слов, каждое 50-мерное ie num_embeddingss=1000
, embedding_dim=50
. Тогда torch.nn.Embedding
работает как справочная таблица (хотя справочную таблицу можно обучить):
emb_layer = torch.nn.Embedding(1000,50)
x = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
y = emb_layer(x)
y
будет тензор формы 2x4x50. Я надеюсь, что эта часть вам понятна.
Теперь, если я укажу padding_idx=2
, ie
emb_layer = torch.nn.Embedding(1000,50, padding_idx=2)
x = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
y = emb_layer(x)
, тогда выходной сигнал будет по-прежнему 2x4x50, но 50-тёмный вектор в (1 , 2) и (2,3) будут все нули, так как значения x[1,2]
и x[2,3]
равны 2, что равно padding_idx
. Вы можете думать о нем, как о 3-м слове в таблице поиска (поскольку таблица поиска будет иметь индексирование 0) не используется для обучения.