Функция F.conv1d
Функция F.conv1d из модуля torch.nn.functional
выполняет одномерную свертку входного тензора с заданными
весами свертки (фильтрами). Она широко используется в
обработке сигналов, временных рядов и текстовых данных.
Функция принимает входной тензор, тензор весов и смещение
(необязательно), а также параметры шага, паддинга и
расширения (дилатации).
Синтаксис
torch.nn.functional.conv1d(
input,
weight,
bias=None,
stride=1,
padding=0,
dilation=1,
groups=1
)
Параметры
Функция принимает следующие параметры:
-
input- входной тензор формы(N, C_in, L), гдеN- размер батча,C_in- количество входных каналов,L- длина сигнала. -
weight- тензор весов формы(C_out, C_in//groups, kernel_size), гдеC_out- количество выходных каналов,kernel_size- размер ядра свертки. -
bias- необязательное смещение формы(C_out,)(по умолчаниюNone). -
stride- шаг свертки (по умолчанию1). -
padding- паддинг (дополнение нулями) для сохранения размерности (по умолчанию0). -
dilation- расстояние между элементами ядра (по умолчанию1). -
groups- количество групп для групповой свертки (по умолчанию1).
Пример
Выполним простую одномерную свертку с ядром размера 3 на входном сигнале длины 10:
import torch
import torch.nn.functional as F
# Входной сигнал: батч 1, 1 канал, длина 10
input = torch.tensor([
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
]).unsqueeze(0)
# Ядро свертки: 1 выходной канал, 1 входной канал, размер 3
weight = torch.tensor([
[1.0, 0.0, -1.0]
]).unsqueeze(0).unsqueeze(0)
res = F.conv1d(input, weight)
print(res)
Результат выполнения кода:
tensor([[[-2., -2., -2., -2., -2., -2., -2., -2.]]])
Пример
Используем свертку с шагом 2 и паддингом 1 для сохранения размерности:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
input = torch.randn(1, 3, 10)
weight = torch.randn(5, 3, 4)
bias = torch.randn(5)
res = F.conv1d(
input,
weight,
bias=bias,
stride=2,
padding=1
)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 5, 5])
Пример
Применим свертку с расширением (дилатацией) для увеличения рецептивного поля без увеличения размера ядра:
import torch
import torch.nn.functional as F
input = torch.ones(1, 1, 10)
weight = torch.ones(1, 1, 3)
res = F.conv1d(
input,
weight,
dilation=2
)
print(res)
Результат выполнения кода:
tensor([[[3., 3., 3., 3., 3., 3.]]])
Смотрите также
-
функцию
F.conv2d,
которая выполняет двумерную свертку для изображений -
функцию
F.conv3d,
которая выполняет трехмерную свертку для объемных данных -
функцию
F.conv_transpose2d,
которая выполняет операцию, обратную свертке (транспонированная свертка) -
функцию
F.pad,
которая добавляет паддинг к тензору перед сверткой