Класс Conv2d
Класс Conv2d применяет двумерную свертку к входным данным.
Он принимает входной тензор формы (batch_size, in_channels, height, width)
и возвращает тензор формы (batch_size, out_channels, new_height, new_width).
Параметры свертки (веса и смещения) обучаются в процессе обратного распространения.
Основные параметры: in_channels - количество входных каналов,
out_channels - количество выходных каналов (фильтров),
kernel_size - размер ядра свертки.
Синтаксис
torch.nn.Conv2d(
in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode='zeros',
device=None,
dtype=None
)
Основные параметры
in_channels - количество каналов на входе (например, 3 для RGB-изображения).
out_channels - количество фильтров, которые будет применять слой.
kernel_size - размер ядра свертки (целое число или кортеж).
stride - шаг свертки (по умолчанию 1).
padding - добавление нулей по краям (по умолчанию 0).
padding_mode - режим заполнения ('zeros', 'reflect', 'replicate', 'circular').
bias - булево значение, добавлять ли обучаемый bias.
Пример
Создадим сверточный слой с одним входным каналом, одним выходным каналом и ядром 3x3:
import torch
import torch.nn as nn
conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3)
print(conv)
Результат выполнения кода:
Conv2d(1, 1, kernel_size=(3, 3), stride=(1, 1))
Пример
Применим свертку к случайному тензору размером 1x1x5x5 (батч, каналы, высота, ширина):
import torch
import torch.nn as nn
torch.manual_seed(0)
conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3)
t = torch.randn(1, 1, 5, 5)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 1, 3, 3])
Пример
Используем свертку с шагом 2 и паддингом 1 для сохранения размера:
import torch
import torch.nn as nn
torch.manual_seed(0)
conv = nn.Conv2d(
in_channels=3,
out_channels=10,
kernel_size=3,
stride=2,
padding=1
)
t = torch.randn(1, 3, 32, 32)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 10, 16, 16])
Пример
Создадим свертку с ядром 5x5 и нулевым паддингом, чтобы выходные размеры совпадали с входными:
import torch
import torch.nn as nn
torch.manual_seed(0)
conv = nn.Conv2d(
in_channels=3,
out_channels=16,
kernel_size=5,
padding=2
)
t = torch.randn(8, 3, 64, 64)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([8, 16, 64, 64])
Смотрите также
-
класс
Conv1d,
который выполняет одномерную свертку для последовательных данных -
класс
Conv3d,
который выполняет трехмерную свертку для объемных данных -
класс
MaxPool2d,
который выполняет операцию пулинга для уменьшения размерности -
класс
BatchNorm2d,
который выполняет нормализацию данных после сверточных слоев