Upsample3D¶
Описание¶
Увеличивает размерность трёхмерных карт в заданное количество раз, заполняя новые ячейки значениями согласно выбранному режиму (см. параметры).
В отличие от деконволюции данный слой не является обучаемым.
Инициализация¶
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")