Fonction torch.nn.Conv1d de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.Conv1dEst un module de convolution unidimensionnel dans PyTorch.
Principalement utilisé pour le traitement des données séquentielles, telles que le texte, l'audio et les signaux de séries temporelles.
Définition de fonction
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
Description du paramètre
in_channels: Nombre de canaux d'entréeout_channels: Nombre de canaux de sortiekernel_size: Taille du noyau
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
# Convolution 1D : canaux d'entrée=3, canaux de sortie=64, taille du noyau=3
conv1d = nn.Conv1d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# Entrée : batch=4, canaux=3, longueur de séquence=100
x = torch.randn(4, 3, 100)
output = conv1d(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
import torch.nn as nn
# Convolution 1D : canaux d'entrée=3, canaux de sortie=64, taille du noyau=3
conv1d = nn.Conv1d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# Entrée : batch=4, canaux=3, longueur de séquence=100
x = torch.randn(4, 3, 100)
output = conv1d(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
Exemple 2 : Classification de texte
Exemple
import torch
import torch.nn as nn
class TextCNN(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(TextCNN, self).__init__()
# Couche d'embedding : (batch, seq) -> (batch, embed, seq)
self.embedding = nn.Embedding(vocab_size, embed_dim)
# Plusieurs noyaux de convolution de tailles différentes
self.convs = nn.ModuleList([
nn.Conv1d(embed_dim, 128, kernel_size=k)
for k in [2, 3, 4, 5]
])
self.fc = nn.Linear(128 * 4, num_classes)
def forward(self, x):
# x: (batch, seq)
x = self.embedding(x) # (batch, seq, embed)
x = x.permute(0, 2, 1) # (batch, embed, seq)
# Convolution + ReLU + GlobalMaxPool
pooled = []
for conv in self.convs:
c = conv(x) # (batch, 128, seq')
c = nn.functional.relu(c)
c = c.max(dim=2)[0] # Pooling max global
pooled.append(c)
x = torch.cat(pooled, dim=1)
return self.fc(x)
# Test
model = TextCNN(vocab_size=10000, embed_dim=128, num_classes=2)
x = torch.randint(0, 10000, (4, 50)) # batch=4, seq=50
output = model(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
import torch.nn as nn
class TextCNN(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(TextCNN, self).__init__()
# Couche d'embedding : (batch, seq) -> (batch, embed, seq)
self.embedding = nn.Embedding(vocab_size, embed_dim)
# Plusieurs noyaux de convolution de tailles différentes
self.convs = nn.ModuleList([
nn.Conv1d(embed_dim, 128, kernel_size=k)
for k in [2, 3, 4, 5]
])
self.fc = nn.Linear(128 * 4, num_classes)
def forward(self, x):
# x: (batch, seq)
x = self.embedding(x) # (batch, seq, embed)
x = x.permute(0, 2, 1) # (batch, embed, seq)
# Convolution + ReLU + GlobalMaxPool
pooled = []
for conv in self.convs:
c = conv(x) # (batch, 128, seq')
c = nn.functional.relu(c)
c = c.max(dim=2)[0] # Pooling max global
pooled.append(c)
x = torch.cat(pooled, dim=1)
return self.fc(x)
# Test
model = TextCNN(vocab_size=10000, embed_dim=128, num_classes=2)
x = torch.randint(0, 10000, (4, 50)) # batch=4, seq=50
output = model(x)
print("Forme d'entrée :", x.shape)
print("Forme de sortie :", output.shape)
Exemple 3 : Traitement audio
Exemple
import torch
import torch.nn as nn
# Extraction de caractéristiques audio
conv_audio = nn.Conv1d(in_channels=1, out_channels=32, kernel_size=5, stride=2)
# Audio monocanal : batch=4, canaux=1, points d'échantillonnage=16000
audio = torch.randn(4, 1, 16000)
output = conv_audio(audio)
print("Forme d'entrée :", audio.shape)
print("Forme de sortie :", output.shape)
print("Longueur de sortie :", output.shape[2])
import torch.nn as nn
# Extraction de caractéristiques audio
conv_audio = nn.Conv1d(in_channels=1, out_channels=32, kernel_size=5, stride=2)
# Audio monocanal : batch=4, canaux=1, points d'échantillonnage=16000
audio = torch.randn(4, 1, 16000)
output = conv_audio(audio)
print("Forme d'entrée :", audio.shape)
print("Forme de sortie :", output.shape)
print("Longueur de sortie :", output.shape[2])
Cas d'utilisation
- Classification de texte: TextCNN
- Traitement audio: Extraction de caractéristiques de la parole
- Séries temporelles: Filtrage du signal
Remarque : La forme du tenseur d'entrée est (batch, channels, length).
Autres extensions