Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
375 of 769 menu
◀ ▶

Класс ZeroPad2d

Класс ZeroPad2d из модуля torch.nn позволяет добавить нулевые отступы (padding) вокруг двумерных данных, таких как изображения или карты признаков. При инициализации слоя указывается количество пикселей, добавляемых с каждой стороны тензора. Параметр padding может быть задан в виде числа (одинаковое дополнение по всем сторонам), кортежа из двух чисел (дополнение по высоте и ширине соответственно) или кортежа из четырех чисел (отдельные значения для левой, правой, верхней и нижней границ). Слой не имеет обучаемых параметров и работает только во время прямого прохода.

Синтаксис

torch.nn.ZeroPad2d(padding)

Пример

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

import torch import torch.nn as nn # Создаем слой с дополнением 2 по всем сторонам pad = nn.ZeroPad2d(2) # Входной тензор размером (высота, ширина) = (3, 3) t = torch.tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]).float() # Добавляем размерность батча и каналов: (batch, channels, height, width) t = t.unsqueeze(0).unsqueeze(0) res = pad(t) print(res)

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

tensor([[[[0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0.], [0., 0., 1., 2., 3., 0., 0.], [0., 0., 4., 5., 6., 0., 0.], [0., 0., 7., 8., 9., 0., 0.], [0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0.]]]])

Пример

Дополнение с разными значениями по высоте и ширине (padding=(1, 3)):

import torch import torch.nn as nn # Дополнение: 1 по высоте, 3 по ширине pad = nn.ZeroPad2d((1, 3)) t = torch.tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]).float().unsqueeze(0).unsqueeze(0) res = pad(t) print(res.shape) print(res)

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

torch.Size([1, 1, 5, 9]) tensor([[[[0., 0., 0., 1., 2., 3., 0., 0., 0.], [0., 0., 0., 4., 5., 6., 0., 0., 0.], [0., 0., 0., 7., 8., 9., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0.]]]])

Пример

Дополнение с отдельными значениями для каждой стороны (left, right, top, bottom):

import torch import torch.nn as nn # padding=(left, right, top, bottom) pad = nn.ZeroPad2d((1, 2, 3, 1)) t = torch.tensor([ [1, 2], [3, 4] ]).float().unsqueeze(0).unsqueeze(0) res = pad(t) print(res.shape) print(res)

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

torch.Size([1, 1, 6, 5]) tensor([[[[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 1., 2., 0., 0.], [0., 3., 4., 0., 0.], [0., 0., 0., 0., 0.]]]])

Пример

Использование ZeroPad2d в составе последовательной модели:

import torch import torch.nn as nn model = nn.Sequential( nn.ZeroPad2d(1), nn.Conv2d(1, 3, kernel_size=3) ) t = torch.randn(1, 1, 5, 5) res = model(t) print(res.shape)

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

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

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

  • слой ConstantPad2d,
    который позволяет дополнять тензоры константными значениями вместо нулей
  • слой ReflectionPad2d,
    который отражает значения на границах тензора
  • слой ReplicationPad2d,
    который копирует крайние значения тензора
  • слой CircularPad2d,
    который использует циклическое дополнение
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить