Класс Conv3d
Класс Conv3d применяет трёхмерную свёртку к входным данным.
Первый параметр in_channels задаёт количество входных каналов,
второй out_channels - количество выходных каналов (фильтров),
третий kernel_size - размер ядра свёртки.
Дополнительно можно задать шаг свёртки stride, отступы padding
и другие параметры.
Синтаксис
torch.nn.Conv3d(
in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode='zeros',
device=None,
dtype=None
)
Пример
Давайте создадим простой трёхмерный свёрточный слой для обработки объёмных данных размером 16x16x16:
import torch
# Создаём слой Conv3d
conv = torch.nn.Conv3d(
in_channels=1,
out_channels=8,
kernel_size=3,
stride=1,
padding=1
)
# Создаём случайный входной тензор
t = torch.randn(1, 1, 16, 16, 16)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 8, 16, 16, 16])
Пример
Теперь создадим слой с шагом 2 и без отступов для уменьшения пространственных размерностей:
import torch
conv = torch.nn.Conv3d(
in_channels=3,
out_channels=16,
kernel_size=3,
stride=2,
padding=0
)
t = torch.randn(4, 3, 32, 32, 32)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([4, 16, 15, 15, 15])
Пример
Давайте используем слой с отступами для сохранения размерности при ядре нечётного размера:
import torch
conv = torch.nn.Conv3d(
in_channels=1,
out_channels=4,
kernel_size=3,
stride=1,
padding=1
)
t = torch.randn(2, 1, 8, 8, 8)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 4, 8, 8, 8])
Пример
Рассмотрим слой с расширением (dilation) для увеличения области восприятия без увеличения числа параметров:
import torch
conv = torch.nn.Conv3d(
in_channels=3,
out_channels=8,
kernel_size=3,
dilation=2,
padding=2
)
t = torch.randn(1, 3, 20, 20, 20)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 8, 20, 20, 20])
Пример
Создадим свёрточный слой с групповой свёрткой для разделения каналов на независимые группы:
import torch
conv = torch.nn.Conv3d(
in_channels=6,
out_channels=6,
kernel_size=3,
padding=1,
groups=3
)
t = torch.randn(2, 6, 10, 10, 10)
res = conv(t)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 6, 10, 10, 10])
Смотрите также
-
класс
Conv2d,
который применяет двумерную свёртку для обработки изображений -
класс
Conv1d,
который применяет одномерную свёртку для обработки последовательностей -
класс
MaxPool3d,
который выполняет трёхмерную операцию пулинга для уменьшения размерности -
класс
AvgPool3d,
который выполняет трёхмерное усреднение для субдискретизации