Skip to content

Pad1D

Описание

Info

Родительский класс: Module

Производные классы: -

Данный модуль реализует операцию одномерного паддинга.

Операция паддинга применяется вместе со сверточными слоями нейронных сетей: при паддинге по периметру тензора данных добавляются заданные пользователем константы определённым способом (см. параметр mode), в результате вокруг оригинальных данных образуется прослойка из элементов паддинга.

Это может использоваться, например, для того, чтобы после свёртки сохранился размер карт.

Существует несколько способов задать эту операцию, в библиотеке реализованы следующие:

  • заполнение константным значением;
  • заполнение отражением последнего элемента.

Инициализация

def __init__(self, pad, mode="constant", fillValue=None, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
pad tuple Кортеж параметров паддинга, показывающий с каких сторон следует применять операцию, а с каких - нет -
mode str Режим заполнения. Возможные значения: "constant", "reflect" "constant"
fillValue float Заполняемое значение при режиме "constant" None
name str Имя слоя None

Пояснения

pad - кортеж имеет вид (left, right), где вместо обозначения стороны ставится количество дополнительных элементов для соответствующей стороны. Например, (1, 0) значит, что требуется добавить один дополнительный элемент с левой стороны тензора.

Примеры

Необходимые импорты.

import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import Pad1D

Info

gpuarray необходим для правильного размещения тензора на GPU

batchsize, maps, size = 1, 1, 5
np.random.seed(1234)
data = gpuarray.to_gpu(np.random.randint(1, 10, (batchsize, maps, size)).astype(np.float32))
print(data)
[[[4. 7. 6. 5. 9.]]]

Добавим 2 элемента по правой границе в режиме "constant":

padmod = Pad1D(pad=(0, 2))
print(padmod(data))
[[[4. 7. 6. 5. 9. 0. 0.]]]

Поменяем режим на "reflect" и добавим паддинг с левой границы:

padmod = Pad1D(pad=(2, 0), mode="reflect")
print(padmod(data))
[[[6. 7. 4. 7. 6. 5. 9.]]]