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 по перекрёстной корреляции, — размер пакета, — количество каналов, — высота входных плоскостей в пикселях, а — ширина в пикселях.
Этот модуль поддерживает TensorFloat32.
На некоторых устройствах ROCm, при использовании входных данных float16, этот модуль будет использовать разную точность для обратного распространения.
-
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, в этом случае одинаковое значение используется для высоты и ширины; - кортежем из двух целых чисел
tuple, в этом случае первое число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/2.1/generated/torch.nn.Conv2d.html