Функция PyTorch torch.nn.Conv1d
Справочное руководство PyTorch torch.nn
torch.nn.Conv1dЭто одномерный модуль свертки в PyTorch.
В основном используется для обработки данных последовательностей, таких как текст, аудио и сигналы временных рядов.
Определение функции
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
Описание параметра
in_channels: Количество входных каналовout_channels: Количество выходных каналовkernel_size: Размер ядра
Примеры использования
Пример 1: Базовое использование
Пример
import torch
import torch.nn as nn
# Одномерная свёртка: входных каналов=3, выходных каналов=64, размер ядра=3
conv1d = nn.Conv1d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# Вход: batch=4, каналов=3, длина последовательности=100
x = torch.randn(4, 3, 100)
output = conv1d(x)
print("Форма входа:", x.shape)
print("Форма выхода:", output.shape)
import torch.nn as nn
# Одномерная свёртка: входных каналов=3, выходных каналов=64, размер ядра=3
conv1d = nn.Conv1d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# Вход: batch=4, каналов=3, длина последовательности=100
x = torch.randn(4, 3, 100)
output = conv1d(x)
print("Форма входа:", x.shape)
print("Форма выхода:", output.shape)
Пример 2: Классификация текста
Пример
import torch
import torch.nn as nn
class TextCNN(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(TextCNN, self).__init__()
# Слой эмбеддингов: (batch, seq) -> (batch, embed, seq)
self.embedding = nn.Embedding(vocab_size, embed_dim)
# Несколько свёрточных ядер разных размеров
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)
# Свёртка + 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] # Глобальный max pooling
pooled.append(c)
x = torch.cat(pooled, dim=1)
return self.fc(x)
#
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("Форма входа:", x.shape)
print("Форма выхода:", output.shape)
import torch.nn as nn
class TextCNN(nn.Module):
def __init__(self, vocab_size, embed_dim, num_classes):
super(TextCNN, self).__init__()
# Слой эмбеддингов: (batch, seq) -> (batch, embed, seq)
self.embedding = nn.Embedding(vocab_size, embed_dim)
# Несколько свёрточных ядер разных размеров
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)
# Свёртка + 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] # Глобальный max pooling
pooled.append(c)
x = torch.cat(pooled, dim=1)
return self.fc(x)
#
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("Форма входа:", x.shape)
print("Форма выхода:", output.shape)
Пример 3: Обработка аудио
Пример
import torch
import torch.nn as nn
# Извлечение аудиопризнаков
conv_audio = nn.Conv1d(in_channels=1, out_channels=32, kernel_size=5, stride=2)
# Одноканальное аудио: batch=4, channels=1, точек дискретизации=16000
audio = torch.randn(4, 1, 16000)
output = conv_audio(audio)
print("Форма входа:", audio.shape)
print("Форма выхода:", output.shape)
print("Длина выхода:", output.shape[2])
import torch.nn as nn
# Извлечение аудиопризнаков
conv_audio = nn.Conv1d(in_channels=1, out_channels=32, kernel_size=5, stride=2)
# Одноканальное аудио: batch=4, channels=1, точек дискретизации=16000
audio = torch.randn(4, 1, 16000)
output = conv_audio(audio)
print("Форма входа:", audio.shape)
print("Форма выхода:", output.shape)
print("Длина выхода:", output.shape[2])
Сценарии использования
- Классификация текста: TextCNN
- Обработка аудио: Извлечение речевых признаков
- Временные ряды: Фильтрация сигналов
Примечание: Форма входного тензора — (batch, channels, length).
Другие расширения