ConvTranspose2d
-
class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)[source] -
Применяет оператор 2D транспонированной свёртки к входному изображению, состоящему из нескольких входных каналов.
Этот модуль можно рассматривать как градиент Conv2d по отношению к его входу. Он также известен как свёртка с дробным шагом или деконволюция (хотя это не фактическая операция деконволюции, так как она не вычисляет истинное обратное преобразование свёртки). Для получения дополнительной информации см. визуализации здесь и статью Deconvolutional Networks.
Этот модуль поддерживает TensorFloat32.
На некоторых устройствах ROCm, при использовании входных данных с плавающей точкой 16, этот модуль будет использовать разную точность для обратного распространения.
-
strideуправляет шагом для взаимной корреляции. -
paddingуправляет количеством неявного нулевого заполнения по обеим сторонам дляdilation * (kernel_size - 1) - paddingколичества точек. Подробности см. в примечании ниже. -
output_paddingуправляет дополнительным размером, добавляемым к одной стороне формы вывода. Подробности см. в примечании ниже. -
dilationуправляет интервалом между точками ядра; также известен как алгоритм à trous. Сложнее описать, но ссылка здесь имеет хорошую визуализацию того, что делаетdilation. -
groupsуправляет связями между входами и выходами.in_channelsиout_channelsдолжны быть кратныgroups. Например,- При groups=1 все входы свёртываются ко всем выходам.
- При groups=2 операция становится эквивалентной двум слоям свёртки, расположенным бок о бок, каждый из которых видит половину каналов входа и производит половину каналов выхода, а затем они оба конкатенируются.
- При groups=
in_channels, каждый входной канал свёртывается со своим набором фильтров (размером ).
Параметры
kernel_size,stride,padding,output_paddingмогут быть:- одним
int– в этом случае одно и то же значение используется для размеров высоты и ширины - кортежем из двух целых чисел – в этом случае первое
intиспользуется для размера высоты, а второеintдля размера ширины
Примечание
Аргумент
paddingфактически добавляетdilation * (kernel_size - 1) - paddingнулевого заполнения к обеим сторонам входа. Это установлено так, что когдаConv2dиConvTranspose2dинициализированы с одинаковыми параметрами, они являются взаимно обратными относительно размеров входных и выходных данных. Однако, когдаstride > 1,Conv2dсопоставляет несколько входных форм одной и той же выходной форме.output_paddingпредоставлен для решения этой неоднозначности, фактически увеличивая рассчитанный размер выходной формы с одной стороны. Обратите внимание, чтоoutput_paddingиспользуется только для вычисления размера выходной формы, но фактически не добавляет нулевое заполнение к выходу.Примечание
В некоторых случаях, когда заданы тензоры на устройстве CUDA и используется CuDNN, этот оператор может выбрать недетерминированный алгоритм для повышения производительности. Если это нежелательно, вы можете попытаться сделать операцию детерминированной (возможно, за счёт производительности) путём установки
torch.backends.cudnn.deterministic = True. См. Воспроизводимость для получения дополнительной информации.- Параметры
-
- in_channels (int) – Количество каналов во входном изображении
- out_channels (int) – Количество каналов, производимых свёрткой
- kernel_size (int или tuple) – Размер свёрточного ядра
- stride (int или tuple, необязательно) – Шаг свёртки. По умолчанию: 1
-
padding (int или tuple, необязательно) –
dilation * (kernel_size - 1) - paddingнулевого заполнения будет добавлено по обеим сторонам каждой размерности на входе. По умолчанию: 0 - output_padding (int или tuple, необязательно) – Дополнительный размер, добавляемый к одной стороне каждой размерности в форме вывода. По умолчанию: 0
- groups (int, необязательно) – Число блоков соединений от входных каналов к выходным каналам. По умолчанию: 1
-
bias (bool, необязательно) – Если
True, добавляет обучаемый смещение к выходу. По умолчанию:True - dilation (int или tuple, необязательно) – Интервал между элементами ядра. По умолчанию: 1
-
- Форма:
-
- Вход: или
- Выход: или , где
- Переменные
Примеры:
>>> # With square kernels and equal stride >>> m = nn.ConvTranspose2d(16, 33, 3, stride=2) >>> # non-square kernels and unequal stride and with padding >>> m = nn.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2)) >>> input = torch.randn(20, 16, 50, 100) >>> output = m(input) >>> # exact output size can be also specified as an argument >>> input = torch.randn(1, 16, 12, 12) >>> downsample = nn.Conv2d(16, 16, 3, stride=2, padding=1) >>> upsample = nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1) >>> h = downsample(input) >>> h.size() torch.Size([1, 16, 6, 6]) >>> output = upsample(h, output_size=input.size()) >>> output.size() torch.Size([1, 16, 12, 12])
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.ConvTranspose2d.html