Conv2d
-
class 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)[source] -
Применяет 2D свертку к входному сигналу, состоящему из нескольких входных плоскостей.
В самом простом случае выходное значение слоя с размером входа и выходом можно точно описать как:
где — оператор корреляции 2D, — размер пакета, обозначает число каналов, — высота входных плоскостей в пикселях, а — ширина в пикселях.
Этот модуль поддерживает TensorFloat32.
На некоторых устройствах ROCm, при использовании входных данных с плавающей точкой 16, этот модуль будет использовать разную точность для обратного распространения.
-
strideуправляет шагом корреляции, это может быть одно число или кортеж. -
paddingуправляет количеством применяемого заполнения к входу. Это может быть строка {‘valid’, ‘same’} или кортеж целых чисел, определяющий количество неявного заполнения по обеим сторонам. -
dilationуправляет расстоянием между точками ядра; также известен как алгоритм à trous. Его сложнее описать, но в этой ссылке есть хорошая визуализация того, чтоdilationделает. -
groupsуправляет соединениями между входами и выходами.in_channelsиout_channelsдолжны быть кратнымиgroups. Например,- При groups=1 все входы свёртываются ко всем выходам.
- При groups=2 операция становится эквивалентной двум свёрточных слоям, расположенных рядом, каждый из которых видит половину входных каналов и производит половину выходных каналов, и оба из которых затем конкатенируются.
- При groups=
in_channels, каждый входной канал свёртывается со своим набором фильтров (размером ).
Параметры
kernel_size,stride,padding,dilationмогут быть:- одним
int— в этом случае одно и то же значение используется для высоты и ширины измерения - кортежем из двух целых чисел — в этом случае первое
intиспользуется для измерения высоты, а второеintдля измерения ширины
Примечание
Когда
groups == in_channelsиout_channels == K * in_channels, гдеK— положительное целое число, эта операция также известна как «свёртка по глубине».Другими словами, для входных данных размером , свёртка по глубине с множителем глубины
Kможет быть выполнена с аргументами .Примечание
В некоторых ситуациях, когда на устройстве CUDA заданы тензоры и используется CuDNN, этот оператор может выбрать недетерминированный алгоритм для повышения производительности. Если это нежелательно, вы можете попытаться сделать операцию детерминированной (возможно, с потерей производительности) установив
torch.backends.cudnn.deterministic = True. См. Воспроизводимость для получения дополнительной информации.Примечание
padding='valid'эквивалентно отсутствию заполнения.padding='same'заполняет вход так, чтобы выход имел такую же форму, что и вход. Однако этот режим не поддерживает значения шага, отличные от 1.Примечание
Этот модуль поддерживает сложные типы данных, т. е.
complex32, complex64, complex128. -
- Параметры:
-
- in_channels (int) – Количество каналов на входе изображения
- out_channels (int) – Количество каналов, производимых свёрткой
- kernel_size (int или кортеж) – Размер сверточного ядра
- stride (int или кортеж, необязательно) – Шаг свёртки. По умолчанию: 1
- padding (int, кортеж или строка, необязательно) – Заполнение, добавляемое ко всем четырём сторонам входных данных. По умолчанию: 0
-
padding_mode (строка, необязательно) –
'zeros','reflect','replicate'или'circular'. По умолчанию:'zeros' - dilation (int или кортеж, необязательно) – Расстояние между элементами ядра. По умолчанию: 1
- groups (int, необязательно) – Количество заблокированных соединений от входных каналов к выходным каналам. По умолчанию: 1
-
bias (bool, необязательно) – Если
True, добавляет обучаемый смещение к выходу. По умолчанию:True
- Форма:
-
- Вход: или
-
Выход: или , где
- Переменные:
Примеры
>>> # With square kernels and equal stride >>> m = nn.Conv2d(16, 33, 3, stride=2) >>> # non-square kernels and unequal stride and with padding >>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2)) >>> # non-square kernels and unequal stride and with padding and dilation >>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1)) >>> input = torch.randn(20, 16, 50, 100) >>> output = m(input)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.nn.Conv2d.html