BatchToSpace for N-D tensors of type T.
tf.raw_ops.BatchToSpaceND(
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
Tensor.
N-D with shape input_shape = [batch] + spatial_shape + remaining_shape,
where spatial_shape has M dimensions.
block_shape
Tensor. Must be one of the following types: int32, int64.
1-D with shape [M], all values must be >= 1.
crops
Tensor. 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
dimension i + 1, which corresponds to spatial dimension i. It is
required that
crop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1].This operation is equivalent to the following steps:
Reshape
inputtoreshapedof shape: [block_shape[0], ..., block_shape[M-1], batch / prod(block_shape), input_shape[1], ..., input_shape[N-1]]Permute dimensions of
reshapedto producepermutedof 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]]
Reshape
permutedto producereshaped_permutedof 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]]
Crop the start and end of dimensions
[1, ..., M]ofreshaped_permutedaccording tocropsto 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], and
crops = [[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], and
crops = [[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], and
crops = [[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], and
crops = [[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]]]]
name
Returns | |
|---|---|
A Tensor. Has the same type as input.
|