Слой энкодера в PyTorch
Для полного шага энкодера
в PyTorch служит класс
TransformerEncoderLayer.
Он объединяет внимание,
нормализацию и линейные
преобразования в одном блоке.
При создании указывают размер модели - длину вектора на входе и внутри слоя, а также сколько голов участвует во внимании. Создадим один такой слой, подадим пакет последовательностей и выведем форму результата:
import torch
import torch.nn as nn
block = nn.TransformerEncoderLayer(d_model=8, nhead=2)
seq = torch.randn(5, 3, 8)
result = block(seq)
print(result.shape) # выведет torch.Size([5, 3, 8])
Форма на выходе совпадает с формой входа: меняется содержимое векторов, а длина ряда, пакет и ширина остаются прежними.
import torch
import torch.nn as nn
block = nn.TransformerEncoderLayer(d_model=12, nhead=3)
seq = torch.randn(6, 2, 12)
result = block(seq)
print(result.shape) # выведет torch.Size([6, 2, 12])
Соберите блок с размером модели
16 и 4 головами.
Подайте ряд 3,
пакет 2 и ширину
16 и выведите форму
на выходе.
Возьмите размер модели 20
и 5 голов, прогоните
тензор 4 на 1
на 20 и выведите
форму ответа.
Опишите один блок на
8 и 2 головы.
Передайте последовательность
длиной 10 и пакет
4 и выведите форму
получившегося тензора.