Pad1D¶
Описание¶
Данный модуль реализует операцию одномерного паддинга.
Операция паддинга применяется вместе со сверточными слоями нейронных сетей: при паддинге по периметру тензора данных добавляются определённые пользователем констант определённым способом (см. параметр 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))
>>> padmod(data)
[[[4. 7. 6. 5. 9. 0. 0.]]]
Поменяем режим на "reflect" и добавим паддинг с левой границы:
>>> padmod = Pad1D(pad=(2, 0), mode="reflect")
>>> padmod(data)
[[[6. 7. 4. 7. 6. 5. 9.]]]