Функция torch.nn.Bilinear в PyTorch
Справочное руководство PyTorch torch.nn
torch.nn.BilinearЭто билинейный слой в PyTorch.
Он выполняет билинейное преобразование над двумя входами, обычно используется для объединения признаков.
Определение функции
torch.nn.Bilinear(in1_features, out_features, out_features, bias=True)
Формула
y = x1 * W * x2 + b
Пример использования
Пример 1: Базовое использование
Пример
import torch
import torch.nn as nn
# Билинейный слой: два 100-мерных входа -> 50-мерный выход
bilinear = nn.Bilinear(100, 100, 50)
# Два входа
x1 = torch.randn(4, 100)
x2 = torch.randn(4, 100)
output = bilinear(x1, x2)
print("Вход 1:", x1.shape)
print("Вход 2:", x2.shape)
print("Выход:", output.shape)
import torch.nn as nn
# Билинейный слой: два 100-мерных входа -> 50-мерный выход
bilinear = nn.Bilinear(100, 100, 50)
# Два входа
x1 = torch.randn(4, 100)
x2 = torch.randn(4, 100)
output = bilinear(x1, x2)
print("Вход 1:", x1.shape)
print("Вход 2:", x2.shape)
print("Выход:", output.shape)
Пример 2: объединение признаков
Пример
import torch
import torch.nn as nn
# Билинейное объединение признаков (аналогично Skip-gram)
class FusionNet(nn.Module):
def __init__(self, dim=128):
super(FusionNet, self).__init__()
self.bilinear = nn.Bilinear(dim, dim, dim)
def forward(self, feat1, feat2):
return self.bilinear(feat1, feat2)
model = FusionNet()
f1 = torch.randn(4, 128)
f2 = torch.randn(4, 128)
output = model(f1, f2)
print("Выход Fusion:", output.shape)
import torch.nn as nn
# Билинейное объединение признаков (аналогично Skip-gram)
class FusionNet(nn.Module):
def __init__(self, dim=128):
super(FusionNet, self).__init__()
self.bilinear = nn.Bilinear(dim, dim, dim)
def forward(self, feat1, feat2):
return self.bilinear(feat1, feat2)
model = FusionNet()
f1 = torch.randn(4, 128)
f2 = torch.randn(4, 128)
output = model(f1, f2)
print("Выход Fusion:", output.shape)
Пример 3: Количество параметров
Пример
import torch
import torch.nn as nn
# Параметры слоя Bilinear
bilinear = nn.Bilinear(100, 100, 50)
print("Количество параметров:", sum(p.numel() for p in bilinear.parameters()))
print("Размер веса:", bilinear.weight.shape) # (50, 100, 100)
import torch.nn as nn
# Параметры слоя Bilinear
bilinear = nn.Bilinear(100, 100, 50)
print("Количество параметров:", sum(p.numel() for p in bilinear.parameters()))
print("Размер веса:", bilinear.weight.shape) # (50, 100, 100)
Сценарии использования
- Объединение признаков: Мультимодальное
- Механизм внимания
- Моделирование взаимодействия
Примечание: билинейный слой имеет большое количество параметров; используйте с осторожностью.
Другие расширения