РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
296 of 769 menu

Класс 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,
    который выполняет транспонированную свертку для увеличения размерности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить