Проблема с маской заполнения в кодировщике PyTorch TransformerPython

Программы на Python
Гость
Проблема с маской заполнения в кодировщике PyTorch Transformer

Сообщение Гость »


Я столкнулся с проблемой с маской заполнения в кодировщике Transformer Encoder PyTorch. Я пытаюсь гарантировать, что значения в дополненных последовательностях не влияют на выходные данные модели. Однако даже после установки дополненных значений нулями во входной последовательности я все еще наблюдаю различия в выходных данных.

Вот упрощенная версия моего кода:

импортировать факел как th из импорта фонарика nn # Данные размер_пакета = 2 seq_len = 5 входной_размер = 16 src = th.randn(batch_size, seq_len, input_size) # Установите для некоторых значений высокое значение источник[0, 2,:] = 1000,0 источник[1, 4, :] = 1000,0 # Генерируем маску заполнения padding_mask = th.zeros(batch_size, seq_len, dtype=th.bool) дополнение_маска[0, 2] = 1 дополнение_маска[1, 4] = 1 # Передаем данные через кодировщик модели кодировщик = nn.TransformerEncoder( nn.TransformerEncoderLayer( d_model=input_size, nhead=1, пакет_первый = Правда, ), количество_слоев = 1, норма=Нет, ) out1000 = кодировщик (src, src_key_padding_mask=padding_mask) # Измените входные данные так, чтобы маскированный вектор не влиял источник[0, 2, :] = 0,0 источник[1, 4, :] = 0,0 # Передаем измененные данные через модель out0 = кодировщик (src, src_key_padding_mask=padding_mask) # Проверяем, совпадают ли результаты утверждать th.allclose( out1000[padding_mask == 0], out0[padding_mask == 0], атол=1e-5, ) Несмотря на то, что во входной последовательности дополненные значения были установлены на нули, я все еще наблюдаю различия в выходных данных Transformer Encoder. Может ли кто-нибудь помочь мне понять, почему это может происходить? Как я могу гарантировать, что значения в дополненных последовательностях не влияют на выходные данные модели?

Вернуться в «Python»