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

Класс CircularPad2d

Класс CircularPad2d предназначен для добавления циклического дополнения к двумерным данным, таким как изображения или карты признаков. В отличие от других видов дополнения, циклическое дополнение копирует значения с противоположных краёв, создавая эффект периодического продолжения данных. Это часто используется в задачах обработки сигналов, спектрального анализа и в некоторых архитектурах нейронных сетей для сохранения периодических свойств данных.

Первым параметром конструктор класса принимает размер дополнения. Это может быть число (одинаковое дополнение по всем четырём сторонам), кортеж из двух чисел (дополнение по высоте и ширине) или кортеж из четырёх чисел (дополнение для каждой стороны: левая, правая, верхняя, нижняя).

Входной тензор должен иметь форму (N, C, H, W), где N - размер батча, C - количество каналов, H и W - высота и ширина.

Синтаксис

torch.nn.CircularPad2d(padding)

Пример

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

import torch from torch import nn t = torch.tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]).float().unsqueeze(0).unsqueeze(0) pad = nn.CircularPad2d(1) res = pad(t) print(res.squeeze())

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

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

Как видно, исходный тензор размером 3x3 был дополнен до 5x5. Значения на краях являются циклическими копиями с противоположных сторон.

Пример

Теперь применим различное дополнение по высоте и ширине:

import torch from torch import nn t = torch.tensor([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ]).float().unsqueeze(0).unsqueeze(0) # Дополнение: (padding_height, padding_width) pad = nn.CircularPad2d((1, 2)) res = pad(t) print(res.squeeze())

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

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

В этом примере мы добавили дополнение высоты 1 (по одному элементу сверху и снизу) и ширины 2 (по два элемента слева и справа).

Пример

Можно задать разное дополнение для каждой стороны тензора:

import torch from torch import nn t = torch.tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]).float().unsqueeze(0).unsqueeze(0) # (padding_left, padding_right, padding_top, padding_bottom) pad = nn.CircularPad2d((1, 2, 3, 0)) res = pad(t) print(res.squeeze())

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

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

Здесь мы добавили по 1 элементу слева, 2 справа, 3 сверху и 0 снизу.

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

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