Класс ConvTranspose1d
Класс ConvTranspose1d из модуля torch.nn предназначен для выполнения транспонированной свертки над одномерными данными. Этот слой часто используют в генеративных моделях и архитектурах типа autoencoder для увеличения разрешения признакового пространства. Первым параметром передается количество входных каналов, вторым - количество выходных каналов, третьим - размер ядра свертки. Дополнительные параметры: stride (шаг), padding (отступы), output_padding (добавочный отступ на выходе), dilation (расширение ядра), groups (группировка) и bias (смещение).
Синтаксис
torch.nn.ConvTranspose1d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros')
Основные параметры
Рассмотрим ключевые параметры класса ConvTranspose1d:
-
in_channels- количество входных каналов -
out_channels- количество выходных каналов -
kernel_size- размер ядра свертки -
stride- шаг свертки (по умолчанию 1) -
padding- отступы, добавляемые к входным данным (по умолчанию 0) -
output_padding- дополнительный отступ, добавляемый к выходным данным (по умолчанию 0) -
bias- флаг использования смещения (по умолчаниюTrue)
Пример
Создадим слой транспонированной свертки для увеличения размерности с 3 до 16 каналов и ядром размера 4:
import torch
conv_trans = torch.nn.ConvTranspose1d(3, 16, 4)
print(conv_trans)
Результат выполнения кода:
ConvTranspose1d(3, 16, kernel_size=(4,), stride=(1,))
Пример
Применим слой к случайному тензору размера (batch_size, channels, length). Входной тензор имеет размер (1, 3, 10), а после слоя размер увеличивается до (1, 16, 13) согласно формуле:
import torch
torch.manual_seed(0)
t = torch.randn(1, 3, 10)
conv_trans = torch.nn.ConvTranspose1d(3, 16, 4)
res = conv_trans(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 16, 13])
Пример с параметрами stride и padding
Изменим шаг и отступы, чтобы управлять размером выходного тензора. При stride=2 и padding=1 выходная длина вычисляется как (input_length - 1) * stride - 2 * padding + kernel_size + output_padding:
import torch
torch.manual_seed(0)
t = torch.randn(1, 3, 10)
conv_trans = torch.nn.ConvTranspose1d(3, 16, 4, stride=2, padding=1)
res = conv_trans(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 16, 21])
Пример использования в нейронной сети
Включим ConvTranspose1d в последовательную модель для увеличения размерности данных:
import torch
model = torch.nn.Sequential(
torch.nn.ConvTranspose1d(3, 64, 4, stride=2),
torch.nn.ReLU(),
torch.nn.ConvTranspose1d(64, 32, 4, stride=2),
torch.nn.ReLU(),
torch.nn.ConvTranspose1d(32, 1, 4, stride=2)
)
torch.manual_seed(0)
t = torch.randn(1, 3, 10)
res = model(t)
print(res.shape)
Результат выполнения кода:
torch.Size([1, 1, 82])
Смотрите также
-
класс
Conv1d,
который выполняет обычную одномерную свертку для уменьшения размерности -
класс
ConvTranspose2d,
который выполняет транспонированную двумерную свертку для изображений -
класс
ConvTranspose3d,
который выполняет транспонированную трехмерную свертку для объемных данных -
класс
Upsample,
который выполняет простое увеличение разрешения без обучаемых параметров