Класс Conv1d
Класс Conv1d создает одномерный сверточный слой для обработки последовательных данных.
Он применяется к входному тензору формы (batch_size, in_channels, length).
Основные параметры: количество входных каналов in_channels, выходных каналов out_channels,
размер ядра kernel_size. Также можно задать шаг stride, дополнение padding,
расширение dilation и количество групп groups.
Синтаксис
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
Пример простейшей свертки
Создадим сверточный слой с одним входным каналом, одним выходным и ядром размера 3:
import torch
import torch.nn as nn
conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=3)
t = torch.tensor([[[1.0, 2.0, 3.0, 4.0, 5.0]]])
res = conv(t)
print(res)
Результат выполнения кода (значения будут случайными из-за инициализации весов):
tensor([[[ 0.1283, 0.2272, 0.3129]]], grad_fn=<SqueezeBackward1>)
Пример с заданными весами
Зададим веса и смещение вручную, чтобы увидеть точный результат свертки:
import torch
import torch.nn as nn
conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=3)
with torch.no_grad():
conv.weight.fill_(1.0)
conv.bias.fill_(0.0)
t = torch.tensor([[[1.0, 2.0, 3.0, 4.0, 5.0]]])
res = conv(t)
print(res)
Результат выполнения кода:
tensor([[[ 6., 9., 12.]]])
Пример с несколькими входными каналами
Создадим слой с двумя входными каналами, тремя выходными и ядром размера 2:
import torch
import torch.nn as nn
conv = nn.Conv1d(in_channels=2, out_channels=3, kernel_size=2)
t = torch.randn(1, 2, 5)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 3, 4])
Пример с параметром stride
Используем шаг stride=2, чтобы уменьшить длину выходной последовательности:
import torch
import torch.nn as nn
conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=3, stride=2)
with torch.no_grad():
conv.weight.fill_(1.0)
conv.bias.fill_(0.0)
t = torch.tensor([[[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]]])
res = conv(t)
print(res)
Результат выполнения кода:
tensor([[[ 6., 12., 18.]]])
Пример с дополнением padding
Добавим дополнение padding=1, чтобы сохранить длину последовательности:
import torch
import torch.nn as nn
conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=3, padding=1)
with torch.no_grad():
conv.weight.fill_(1.0)
conv.bias.fill_(0.0)
t = torch.tensor([[[1.0, 2.0, 3.0, 4.0, 5.0]]])
res = conv(t)
print(res)
Результат выполнения кода:
tensor([[[ 3., 6., 9., 12., 9.]]])
Смотрите также
-
класс
Conv2d,
который реализует двумерную свертку для изображений -
класс
Conv3d,
который реализует трехмерную свертку для объемных данных -
класс
MaxPool1d,
который выполняет максимальную пулингизацию по одномерным данным -
класс
ConvTranspose1d,
который выполняет транспонированную свертку для увеличения размерности