РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
300 of 769 menu

Класс ConvTranspose2d

Класс ConvTranspose2d реализует операцию двумерной транспонированной свертки (также известной как дробно-шаговая свертка или деконволюция). Этот слой позволяет увеличивать пространственное разрешение входного тензора, выполняя обратную операцию по отношению к обычной свертке. Слой принимает на вход тензор формы (N, C_in, H, W), где N - размер батча, C_in - количество входных каналов, H и W - высота и ширина, и возвращает тензор формы (N, C_out, H_out, W_out). Основные параметры: in_channels - количество входных каналов, out_channels - количество выходных каналов, kernel_size - размер ядра свертки, stride - шаг свертки, padding - отступы, output_padding - дополнительное заполнение на выходе для согласования размерностей, dilation - расширение ядра, bias - флаг использования смещения.

Синтаксис

torch.nn.ConvTranspose2d( in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, dilation=1, bias=True )

Пример

Давайте создадим слой транспонированной свертки, который увеличит размер входного тензора в два раза:

import torch import torch.nn as nn layer = nn.ConvTranspose2d( in_channels=3, out_channels=6, kernel_size=3, stride=2, padding=1, output_padding=1 ) x = torch.randn(1, 3, 4, 4) res = layer(x) print(res.shape)

Результат выполнения кода:

torch.Size([1, 6, 8, 8])

Размер выходного тензора увеличился с 4x4 до 8x8 благодаря шагу stride=2.

Пример

Рассмотрим работу слоя с различными параметрами отступов и выходного заполнения для точного контроля размера:

import torch import torch.nn as nn torch.manual_seed(0) layer = nn.ConvTranspose2d( in_channels=2, out_channels=2, kernel_size=3, stride=2, padding=0, output_padding=0 ) x = torch.randn(1, 2, 3, 3) res = layer(x) print(res.shape) print(layer.weight.shape)

Результат выполнения кода:

torch.Size([1, 2, 7, 7]) torch.Size([2, 2, 3, 3])

Выходной размер вычисляется по формуле: H_out = (H_in - 1) * stride - 2 * padding + dilation * (kernel_size - 1) + output_padding + 1.

Пример

Используем транспонированную свертку в составе последовательной модели для увеличения разрешения признакового пространства:

import torch import torch.nn as nn model = nn.Sequential( nn.ConvTranspose2d(3, 16, 4, stride=2, padding=1), nn.ReLU(), nn.ConvTranspose2d(16, 8, 4, stride=2, padding=1), nn.ReLU(), nn.ConvTranspose2d(8, 3, 3, padding=1) ) x = torch.randn(1, 3, 8, 8) res = model(x) print(res.shape)

Результат выполнения кода:

torch.Size([1, 3, 32, 32])

Модель увеличила разрешение входного изображения с 8x8 до 32x32, что полезно в задачах генерации изображений.

Смотрите также

  • класс Conv2d,
    который выполняет обычную двумерную свертку для понижения размерности
  • класс ConvTranspose1d,
    который реализует одномерную транспонированную свертку
  • класс ConvTranspose3d,
    который реализует трёхмерную транспонированную свертку
  • класс Upsample,
    который выполняет простое увеличение разрешения без обучаемых параметров
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить