Skip to content

Upsample3D

Описание

Info

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

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

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

В отличие от деконволюции данный слой не является обучаемым.

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

def __init__(self, scale=2, mode="nearest", name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
scale Union[int, tuple] Масштаб: во сколько раз увеличить входной тензор 2
mode str Режим заполнения новых ячеек "nearest"
name str Имя слоя None

Пояснения

scale - возможна передача как единой величины масштаба по глубине, высоте и ширине, так и tuple вида (scale_d, scale_h, scale_w), где scale_d - величина масштаба для глубины карты, scale_h - величина масштаба для высоты карты, и scale_w - для ширины;


mode - возможные варианты: "nearest" (копирует значение ближайшей ячейки), "linear" (использует линейную интерполяцию по значениям близлежащих ячеек).

Примеры

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

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

Info

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

batchsize, maps, d, h, w = 1, 1, 3, 3, 3
data = gpuarray.to_gpu(np.random.randint(0, 10, (batchsize, maps, d, h, w)).astype(np.float32))
upsample = Upsample3D(scale=2, mode="nearest")
upsample(data)

Как и говорилось выше, масштаб можно задать разным для глубины, высоты и ширины (в этом случае длина кортежа масштабов должна соответствовать количеству размерностей карт):

upsample = Upsample3D(scale=(2, 1, 3), mode="nearest")

При линейной интерполяции результаты будут отличаться:

upsample = Upsample3D(scale=2, mode="linear")