space_to_depth¶
- paddle.fluid.layers.nn. space_to_depth ( x, blocksize, name=None ) [source]
-
Gives a blocksize to space_to_depth the input LoDtensor with Layout: [batch, channel, height, width]
- This op rearranges blocks of spatial data, into depth. More specifically, this op outputs a copy of
-
theinput LoDtensor where values from the height and width dimensions are moved to the channel dimension.
The attr blocksize indicates the input block size.
- space_to_depth will reorganize the elements of input with shape[batch, channel, height, width]
-
according to blocksize to construct output with shape [batch, channel * blocksize * blocksize, height/blocksize, width/blocksize]:
Non-overlapping blocks of size block_size x block size are rearranged into depth at each location.
The Y, X coordinates within each block of the input become the high order component of the output channel index
channel should be divisible by square of blocksize
height, width should be divsible by blocksize
- This OP is useful for resizing the activations between convolutions
-
(but keeping all data)
Given the input x with the shape [1, 1, 4, 4]: x.data = [[[[1, 2, 5, 6], [3, 4, 7, 8], [9, 10, 13, 14], [11, 12, 15, 16]]]] blocksize = 2 then get the output with the shape [1, 4, 2, 2]: out.data = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]], [[13, 14], [15, 16]]]]
- Parameters
-
x (Variable) – The input, which should be 4 dims Tensor or LodTensor, with the shape [batch, channel, height, width]
blocksize (int) – The blocksize to select the element on each feature map should be > 2
name (str, optional) – For detailed information, please refer to Name. Usually name is no need to set and None by default.
- Returns
-
Tensor, The output, which should be 4 dims Tensor or LodTensor, with the shape [batch, channel * blocksize * blocksize, height/blocksize, width/blocksize]
Examples
import paddle.fluid as fluid import numpy as np import numpy as np import paddle paddle.enable_static() data = fluid.data( name='data', shape=[1, 4, 2, 2], dtype='float32') space_to_depthed = fluid.layers.space_to_depth( x=data, blocksize=2) exe = fluid.Executor(fluid.CPUPlace()) data_np = np.arange(0,16).reshape((1,4,2,2)).astype('float32') print(data_np) #array([[[[ 0., 1.], [ 2., 3.]], # [[ 4., 5.], [ 6., 7.]], # [[ 8., 9.], [10., 11.]], # [[12., 13.], [14., 15.]]]], dtype=float32) out_main = exe.run(fluid.default_main_program(), feed={'data': data_np}, fetch_list=[space_to_depthed]) print(out_main) #[array([[[[ 0.]], [[ 4.]], [[ 1.]], [[ 5.]], # [[ 8.]], [[12.]], [[ 9.]], [[13.]], # [[ 2.]], [[ 6.]], [[ 3.]], [[ 7.]], # [[10.]], [[14.]], [[11.]], [[15.]]]], dtype=float32)]