![]() |
BatchToSpace for N-D tensors of type T.
tf.compat.v2.batch_to_space(
input,
block_shape,
crops,
name=None
)
This operation reshapes the "batch" dimension 0 into M + 1
dimensions of
shape block_shape + [batch]
, interleaves these blocks back into the grid
defined by the spatial dimensions [1, ..., M]
, to obtain a result with the
same rank as the input. The spatial dimensions of this intermediate result
are then optionally cropped according to crops
to produce the output. This
is the reverse of SpaceToBatch. See below for a precise description.
Args:
input
: ATensor
. N-D with shapeinput_shape = [batch] + spatial_shape + remaining_shape
, where spatial_shape has M dimensions.block_shape
: ATensor
. Must be one of the following types:int32
,int64
. 1-D with shape[M]
, all values must be >= 1. For backwards compatibility with TF 1.0, this parameter may be an int, in which case it is converted tonumpy.array([block_shape, block_shape], dtype=numpy.int64)
.crops
: ATensor
. Must be one of the following types:int32
,int64
. 2-D with shape[M, 2]
, all values must be >= 0.crops[i] = [crop_start, crop_end]
specifies the amount to crop from input dimensioni + 1
, which corresponds to spatial dimensioni
. It is required thatcrop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1]
. This operation is equivalent to the following steps:- Reshape
input
toreshaped
of shape: [block_shape[0], ..., block_shape[M-1], batch / prod(block_shape), input_shape[1], ..., input_shape[N-1]] 2. Permute dimensions ofreshaped
to producepermuted
of shape [batch / prod(block_shape), input_shape[1], block_shape[0], ..., input_shape[M], block_shape[M-1], input_shape[M+1], ..., input_shape[N-1]] 3. Reshapepermuted
to producereshaped_permuted
of shape [batch / prod(block_shape), input_shape[1] * block_shape[0], ..., input_shape[M] * block_shape[M-1], input_shape[M+1], ..., input_shape[N-1]] 4. Crop the start and end of dimensions[1, ..., M]
ofreshaped_permuted
according tocrops
to produce the output of shape: [batch / prod(block_shape), input_shape[1] * block_shape[0] - crops[0,0] - crops[0,1], ..., input_shape[M] * block_shape[M-1] - crops[M-1,0] - crops[M-1,1], input_shape[M+1], ..., input_shape[N-1]] Some examples: (1) For the following input of shape[4, 1, 1, 1]
,block_shape = [2, 2]
, andcrops = [[0, 0], [0, 0]]
:[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
The output tensor has shape[1, 2, 2, 1]
and value:x = [[[[1], [2]], [[3], [4]]]]
(2) For the following input of shape[4, 1, 1, 3]
,block_shape = [2, 2]
, andcrops = [[0, 0], [0, 0]]
:[[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
The output tensor has shape[1, 2, 2, 3]
and value:x = [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]]
(3) For the following input of shape[4, 2, 2, 1]
,block_shape = [2, 2]
, andcrops = [[0, 0], [0, 0]]
:x = [[[[1], [3]], [[9], [11]]], [[[2], [4]], [[10], [12]]], [[[5], [7]], [[13], [15]]], [[[6], [8]], [[14], [16]]]]
The output tensor has shape[1, 4, 4, 1]
and value:x = [[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]
(4) For the following input of shape[8, 1, 3, 1]
,block_shape = [2, 2]
, andcrops = [[0, 0], [2, 0]]
:x = [[[[0], [1], [3]]], [[[0], [9], [11]]], [[[0], [2], [4]]], [[[0], [10], [12]]], [[[0], [5], [7]]], [[[0], [13], [15]]], [[[0], [6], [8]]], [[[0], [14], [16]]]]
The output tensor has shape[2, 2, 4, 1]
and value:x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]]], [[[9], [10], [11], [12]], [[13], [14], [15], [16]]]]
- Reshape
name
: A name for the operation (optional).
Returns:
A Tensor
. Has the same type as input
.