Fonction torch.nn.Bilinear de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.BilinearC'est une couche bilinéaire dans PyTorch.
Elle effectue une transformation bilinéaire sur deux entrées, couramment utilisée pour la fusion de caractéristiques.
Définition de fonction
torch.nn.Bilinear(in1_features, out_features, out_features, bias=True)
Formule
y = x1 * W * x2 + b
Exemple d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
# Couche bilinéaire : deux entrées de dimension 100 -> sortie de dimension 50
bilinear = nn.Bilinear(100, 100, 50)
# Deux entrées
x1 = torch.randn(4, 100)
x2 = torch.randn(4, 100)
output = bilinear(x1, x2)
print("Entrée 1 :", x1.shape)
print("Entrée 2 :", x2.shape)
print("Sortie :", output.shape)
import torch.nn as nn
# Couche bilinéaire : deux entrées de dimension 100 -> sortie de dimension 50
bilinear = nn.Bilinear(100, 100, 50)
# Deux entrées
x1 = torch.randn(4, 100)
x2 = torch.randn(4, 100)
output = bilinear(x1, x2)
print("Entrée 1 :", x1.shape)
print("Entrée 2 :", x2.shape)
print("Sortie :", output.shape)
Exemple 2 : Fusion de caractéristiques
Exemple
import torch
import torch.nn as nn
# Fusion de caractéristiques bilinéaire (similaire à 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("Sortie de fusion :", output.shape)
import torch.nn as nn
# Fusion de caractéristiques bilinéaire (similaire à 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("Sortie de fusion :", output.shape)
Exemple 3 : Nombre de paramètres
Exemple
import torch
import torch.nn as nn
# Paramètres de la couche bilinéaire
bilinear = nn.Bilinear(100, 100, 50)
print("Nombre de paramètres :", sum(p.numel() for p in bilinear.parameters()))
print("Forme du poids :", bilinear.weight.shape) # (50, 100, 100)
import torch.nn as nn
# Paramètres de la couche bilinéaire
bilinear = nn.Bilinear(100, 100, 50)
print("Nombre de paramètres :", sum(p.numel() for p in bilinear.parameters()))
print("Forme du poids :", bilinear.weight.shape) # (50, 100, 100)
Cas d'utilisation
- Fusion de caractéristiques: multimodal
- Mécanisme d'attention
- Modélisation des interactions
Remarque : la couche bilinéaire a un grand nombre de paramètres ; à utiliser avec prudence.
Autres extensions