Upsample2D¶
Description¶
Increases the dimension of two-dimensional maps by a specified number of times, filling new cells with values according to the selected mode (see parameters).
In contrast to deconvolution this layer is not trainable.
Initializing¶
def __init__(self, scale=2, mode="nearest", name=None):
Parameters
Parameter | Allowed types | Description | Default |
---|---|---|---|
scale | Union[int, tuple] | Scale: a number by which the tensor dimensions will be multiplied | 2 |
mode | str | New cells filling mode | "nearest" |
name | str | Layer name | None |
Explanations
scale
- possible to specify either a single scale value in height or width, and a tuple of the form (scale_h, scale_w)
, where scale_h
- scale value for the map height, and scale_w
- for the width;
mode
- possible options: "nearest" (copies the value of the nearest cell), "linear" (uses linear interpolation according to the values of nearby cells).
Examples¶
Necessary imports:
import numpy as np
from PuzzleLib.Backend import gpuarray
from PuzzleLib.Modules import Upsample2D
Info
gpuarray
is required to properly place the tensor in the GPU
np.random.seed(123)
batchsize, maps, h, w = 1, 1, 3, 3
data = gpuarray.to_gpu(np.random.randint(0, 10, (batchsize, maps, h, w)).astype(np.float32))
print(data)
[[[[2. 2. 6.]
[1. 3. 9.]
[6. 1. 0.]]]]
upsample = Upsample2D(scale=2, mode="nearest")
print(upsample(data))
[[[[2. 2. 2. 2. 6. 6.]
[2. 2. 2. 2. 6. 6.]
[1. 1. 3. 3. 9. 9.]
[1. 1. 3. 3. 9. 9.]
[6. 6. 1. 1. 0. 0.]
[6. 6. 1. 1. 0. 0.]]]]
As mentioned above, the scale can be set different for height and width (in this case, the length of the scale tuple should correspond to the number of map dimensions):
upsample = Upsample2D(scale=(2, 1), mode="nearest")
print(upsample(data))
[[[[2. 2. 6.]
[2. 2. 6.]
[1. 3. 9.]
[1. 3. 9.]
[6. 1. 0.]
[6. 1. 0.]]]]
With linear interpolation, the results will be different:
upsample = Upsample2D(scale=2, mode="linear")
print(upsample(data))
[[[[2. 2. 2. 2.8000002 4.4 6. ]
[1.6 1.9200001 2.2400002 3.3600004 5.28 7.2000003 ]
[1.2 1.84 2.48 3.9200003 6.1600003 8.400001 ]
[2.0000002 2.2400002 2.48 3.52 5.3599997 7.2 ]
[4. 3.1200001 2.24 2.16 2.8799999 3.6 ]
[6. 4. 2. 0.79999995 0.39999998 0. ]]]]