BatchToSpace for N-D tensors of type T.
Aliases:
tf.compat.v2.batch_to_space
tf.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 to numpy.array([block_shape
,block_shape
], dtype=numpy.int64
).crops
: ATensor
. Must be one of the followi
ng types:int32
,int64
. 2-D wi
th shape[M, 2]
, all values must be >= 0.crops
[i
] = [crop_start, crop_end] speci
fi
es the amount to crop frominput
di
mensi
oni + 1
, whi
ch corresponds to spati
al di
mensi
oni
. Iti
s requi
red that crop_start[i
] + crop_end[i
] <=block_shape
[i
] *input
_shape[i + 1
]. Thi
s operati
oni
s equi
valent to the followi
ng steps: Reshapeinput
toreshaped
of shape: [block_shape
[0], ...,block_shape
[M-1], batch / prod(block_shape
),input
_shape[1], ...,input
_shape[N-1]] 2. Permute di
mensi
ons 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 di
mensi
ons[1, ..., M]
ofreshaped
permuted
accordi
ng 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 followi
nginput
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 followi
nginput
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 followi
nginput
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 followi
nginput
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: ``- 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 di
mensi
ons 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 di
mensi
ons[1, ..., M]
ofreshaped
permuted
accordi
ng 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 followi
nginput
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 followi
nginput
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 followi
nginput
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 followi
nginput
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]]]]
: A
for the operati
on (opti
onal).
Returns:
A Tensor
. Has the same type as input
.