tf.space_to_batch
Stay organized with collections
Save and categorize content based on your preferences.
SpaceToBatch for N-D tensors of type T.
tf.space_to_batch(
input, block_shape, paddings, name=None
)
This operation divides "spatial" dimensions [1, ..., M]
of the input into a
grid of blocks of shape block_shape
, and interleaves these blocks with the
"batch" dimension (0) such that in the output, the spatial dimensions
[1, ..., M]
correspond to the position within the grid, and the batch
dimension combines both the position within a spatial block and the original
batch position. Prior to division into blocks, the spatial dimensions of the
input are optionally zero padded according to paddings
. See below for a
precise description.
This operation is equivalent to the following steps:
Zero-pad the start and end of dimensions [1, ..., M]
of the
input according to paddings
to produce padded
of shape padded_shape
.
Reshape padded
to reshaped_padded
of shape:
[batch] +
[padded_shape[1] / block_shape[0],
block_shape[0],
...,
padded_shape[M] / block_shape[M-1],
block_shape[M-1]] +
remaining_shape
Permute dimensions of reshaped_padded
to produce
permuted_reshaped_padded
of shape:
block_shape +
[batch] +
[padded_shape[1] / block_shape[0],
...,
padded_shape[M] / block_shape[M-1]] +
remaining_shape
Reshape permuted_reshaped_padded
to flatten block_shape
into the batch
dimension, producing an output tensor of shape:
[batch * prod(block_shape)] +
[padded_shape[1] / block_shape[0],
...,
padded_shape[M] / block_shape[M-1]] +
remaining_shape
Some examples:
(1) For the following input of shape [1, 2, 2, 1]
, block_shape = [2, 2]
, and
paddings = [[0, 0], [0, 0]]
:
x = [[[[1], [2]], [[3], [4]]]]
The output tensor has shape [4, 1, 1, 1]
and value:
[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
(2) For the following input of shape [1, 2, 2, 3]
, block_shape = [2, 2]
, and
paddings = [[0, 0], [0, 0]]
:
x = [[[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]]]
The output tensor has shape [4, 1, 1, 3]
and value:
[[[[1, 2, 3]]], [[[4, 5, 6]]], [[[7, 8, 9]]], [[[10, 11, 12]]]]
(3) For the following input of shape [1, 4, 4, 1]
, block_shape = [2, 2]
, and
paddings = [[0, 0], [0, 0]]
:
x = [[[[1], [2], [3], [4]],
[[5], [6], [7], [8]],
[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]]
The output tensor has shape [4, 2, 2, 1]
and value:
x = [[[[1], [3]], [[9], [11]]],
[[[2], [4]], [[10], [12]]],
[[[5], [7]], [[13], [15]]],
[[[6], [8]], [[14], [16]]]]
(4) For the following input of shape [2, 2, 4, 1]
, block_shape = [2, 2]
, and
paddings = [[0, 0], [2, 0]]
:
x = [[[[1], [2], [3], [4]],
[[5], [6], [7], [8]]],
[[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]]
The output tensor has shape [8, 1, 3, 1]
and value:
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]]]]
Among others, this operation is useful for reducing atrous convolution into
regular convolution.
Args |
input
|
A Tensor .
N-D with shape input_shape = [batch] + spatial_shape + remaining_shape ,
where spatial_shape has M dimensions.
|
block_shape
|
A Tensor . Must be one of the following types: int32 , int64 .
1-D with shape [M] , all values must be >= 1.
|
paddings
|
A Tensor . Must be one of the following types: int32 , int64 .
2-D with shape [M, 2] , all values must be >= 0.
paddings[i] = [pad_start, pad_end] specifies the padding for input dimension
i + 1 , which corresponds to spatial dimension i . It is required that
block_shape[i] divides input_shape[i + 1] + pad_start + pad_end .
|
name
|
A name for the operation (optional).
|
Returns |
A Tensor . Has the same type as input .
|
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates. Some content is licensed under the numpy license.
Last updated 2024-04-26 UTC.
[null,null,["Last updated 2024-04-26 UTC."],[],[],null,["# tf.space_to_batch\n\n\u003cbr /\u003e\n\n|-------------------------------------------------------------------------------------------------------------------------------|\n| [View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.16.1/tensorflow/python/ops/array_ops.py#L3751-L3754) |\n\nSpaceToBatch for N-D tensors of type T.\n\n#### View aliases\n\n\n**Main aliases**\n\n[`tf.nn.space_to_batch`](https://www.tensorflow.org/api_docs/python/tf/space_to_batch)\n\n\u003cbr /\u003e\n\n tf.space_to_batch(\n input, block_shape, paddings, name=None\n )\n\nThis operation divides \"spatial\" dimensions `[1, ..., M]` of the input into a\ngrid of blocks of shape `block_shape`, and interleaves these blocks with the\n\"batch\" dimension (0) such that in the output, the spatial dimensions\n`[1, ..., M]` correspond to the position within the grid, and the batch\ndimension combines both the position within a spatial block and the original\nbatch position. Prior to division into blocks, the spatial dimensions of the\ninput are optionally zero padded according to `paddings`. See below for a\nprecise description.\n\nThis operation is equivalent to the following steps:\n\n1. Zero-pad the start and end of dimensions `[1, ..., M]` of the\n input according to `paddings` to produce `padded` of shape `padded_shape`.\n\n2. Reshape `padded` to `reshaped_padded` of shape:\n\n \\[batch\\] +\n \\[padded_shape\\[1\\] / block_shape\\[0\\],\n block_shape\\[0\\],\n ...,\n padded_shape\\[M\\] / block_shape\\[M-1\\],\n block_shape\\[M-1\\]\\] +\n remaining_shape\n3. Permute dimensions of `reshaped_padded` to produce\n `permuted_reshaped_padded` of shape:\n\n block_shape +\n \\[batch\\] +\n \\[padded_shape\\[1\\] / block_shape\\[0\\],\n ...,\n padded_shape\\[M\\] / block_shape\\[M-1\\]\\] +\n remaining_shape\n4. Reshape `permuted_reshaped_padded` to flatten `block_shape` into the batch\n dimension, producing an output tensor of shape:\n\n \\[batch \\* prod(block_shape)\\] +\n \\[padded_shape\\[1\\] / block_shape\\[0\\],\n ...,\n padded_shape\\[M\\] / block_shape\\[M-1\\]\\] +\n remaining_shape\n\n#### Some examples:\n\n(1) For the following input of shape `[1, 2, 2, 1]`, `block_shape = [2, 2]`, and\n`paddings = [[0, 0], [0, 0]]`: \n\n x = [[[[1], [2]], [[3], [4]]]]\n\nThe output tensor has shape `[4, 1, 1, 1]` and value: \n\n [[[[1]]], [[[2]]], [[[3]]], [[[4]]]]\n\n(2) For the following input of shape `[1, 2, 2, 3]`, `block_shape = [2, 2]`, and\n`paddings = [[0, 0], [0, 0]]`: \n\n x = [[[[1, 2, 3], [4, 5, 6]],\n [[7, 8, 9], [10, 11, 12]]]]\n\nThe output tensor has shape `[4, 1, 1, 3]` and value: \n\n [[[[1, 2, 3]]], [[[4, 5, 6]]], [[[7, 8, 9]]], [[[10, 11, 12]]]]\n\n(3) For the following input of shape `[1, 4, 4, 1]`, `block_shape = [2, 2]`, and\n`paddings = [[0, 0], [0, 0]]`: \n\n x = [[[[1], [2], [3], [4]],\n [[5], [6], [7], [8]],\n [[9], [10], [11], [12]],\n [[13], [14], [15], [16]]]]\n\nThe output tensor has shape `[4, 2, 2, 1]` and value: \n\n x = [[[[1], [3]], [[9], [11]]],\n [[[2], [4]], [[10], [12]]],\n [[[5], [7]], [[13], [15]]],\n [[[6], [8]], [[14], [16]]]]\n\n(4) For the following input of shape `[2, 2, 4, 1]`, block_shape = `[2, 2]`, and\npaddings = `[[0, 0], [2, 0]]`: \n\n x = [[[[1], [2], [3], [4]],\n [[5], [6], [7], [8]]],\n [[[9], [10], [11], [12]],\n [[13], [14], [15], [16]]]]\n\nThe output tensor has shape `[8, 1, 3, 1]` and value: \n\n x = [[[[0], [1], [3]]], [[[0], [9], [11]]],\n [[[0], [2], [4]]], [[[0], [10], [12]]],\n [[[0], [5], [7]]], [[[0], [13], [15]]],\n [[[0], [6], [8]]], [[[0], [14], [16]]]]\n\nAmong others, this operation is useful for reducing atrous convolution into\nregular convolution.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Args ---- ||\n|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `input` | A `Tensor`. N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, where spatial_shape has `M` dimensions. |\n| `block_shape` | A `Tensor`. Must be one of the following types: `int32`, `int64`. 1-D with shape `[M]`, all values must be \\\u003e= 1. |\n| `paddings` | A `Tensor`. Must be one of the following types: `int32`, `int64`. 2-D with shape `[M, 2]`, all values must be \\\u003e= 0. `paddings[i] = [pad_start, pad_end]` specifies the padding for input dimension `i + 1`, which corresponds to spatial dimension `i`. It is required that `block_shape[i]` divides `input_shape[i + 1] + pad_start + pad_end`. |\n| `name` | A name for the operation (optional). |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Returns ------- ||\n|---|---|\n| A `Tensor`. Has the same type as `input`. ||\n\n\u003cbr /\u003e"]]