РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить