Класс Bilinear
Класс Bilinear применяет билинейное преобразование к двум входным тензорам.
Он вычисляет результат по формуле: x1^T * weight * x2 + bias, где
weight - трёхмерный тензор весов, x1 и x2 - входные тензоры.
Первый параметр конструктора определяет размерность первого входного признака,
второй параметр - размерность второго входного признака,
третий параметр - размерность выходного признака.
Четвёртым параметром можно передать смещение (bias).
Синтаксис
torch.nn.Bilinear(in1_features, in2_features, out_features, bias=True)
Пример
Давайте создадим простой билинейный слой с размерами 5, 3 и 2:
import torch
layer = torch.nn.Bilinear(5, 3, 2)
print(layer)
Результат выполнения кода:
Bilinear(in_features=5, out_features=3, bias=True)
Пример
Применим слой к двум случайным тензорам. Зафиксируем зерно для воспроизводимости:
import torch
torch.manual_seed(0)
layer = torch.nn.Bilinear(5, 3, 2)
x1 = torch.randn(1, 5)
x2 = torch.randn(1, 3)
res = layer(x1, x2)
print(res)
Результат выполнения кода:
tensor([[ 0.0045, -0.1147]])
Пример
Билинейный слой поддерживает пакетную обработку. Создадим батч из 3 образцов:
import torch
torch.manual_seed(0)
layer = torch.nn.Bilinear(5, 3, 2)
x1 = torch.randn(3, 5)
x2 = torch.randn(3, 3)
res = layer(x1, x2)
print(res.shape)
print(res)
Результат выполнения кода:
torch.Size([3, 2])
tensor([[-0.4162, -0.1647],
[ 0.1398, -0.5746],
[ 0.7928, 0.7370]])
Пример
Отключим смещение с помощью параметра bias=False:
import torch
torch.manual_seed(0)
layer = torch.nn.Bilinear(5, 3, 2, bias=False)
x1 = torch.randn(2, 5)
x2 = torch.randn(2, 3)
res = layer(x1, x2)
print(res.shape)
print(res)
Результат выполнения кода:
torch.Size([2, 2])
tensor([[-0.8528, -1.5406],
[ 0.5243, 0.4712]])
Смотрите также
-
класс
Linear,
который применяет линейное преобразование к одному тензору -
класс
LazyLinear,
который создаёт линейный слой с ленивой инициализацией -
класс
Identity,
который возвращает входной тензор без изменений -
класс
ReLU,
который применяет функцию активации ReLU к тензору