TensorFlow BatchToSpace的使用
batch_to_space (
input,
crops,
block_size ,
name = None
)
定义在:tensorflow/python/ops/array_ops.py
参见指南:张量变换>分割和连接
用于 T 型的4维张量的 BatchToSpace.
这是更通用的 BatchToSpaceND 的旧版本.
将批处理 (permutes) 数据重新排列到空间数据块中,然后进行裁剪.这是 SpaceToBatch 的逆向转换.更具体地说,此操作输出输入张量的一个副本,其中,批处理维度中的值在空间块中移动到高度和宽度维度,然后沿高度和宽度尺寸进行裁剪.
ARGS:
- input:张量.4-D 张量与形状 [batch*block_size*block_size, height_pad/block_size, width_pad/block_size, depth].请注意,输入张量的批量大小必须可以被 block_size * block_size 整除.
- crops:张量.必须是以下类型之一:int32,int64.具有形状 [2, 2] 的非负整数的2维张量.它指定从空间维度的中间结果中裁剪多少元素,如下所示:
crops = [[crop_top, crop_bottom], [crop_left, crop_right]]
- block_size:一个 int 就是>= 2.
- name:操作的名称(可选).
返回:
返回张量.具有与输入相同的类型.4维形状 [batch, height, width, depth],其中:
height = height_pad - crop_top - crop_bottom
width = width_pad - crop_left - crop_right
ATTR block_size 必须大于 1,它表示块的大小.
一些例子:
(1)对于以下输入的形状 [4, 1, 1, 1] 和 BLOCK_SIZE 为2:
[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
输出张量具有形状 [1, 2, 2, 1] 和值:
x = [[[[1], [2]], [[3], [4]]]]
(2)对于以下输入的形状 [4, 1, 1, 3] 和 BLOCK_SIZE 为2:
[[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
输出张量具有形状 [1, 2, 2, 3] 和 值:
x = [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]]
(3)对于以下输入的形状 [4, 2, 2, 1] 和 BLOCK_SIZE 为2:
x = [[[[1], [3]], [[9], [11]]],
[[[2], [4]], [[10], [12]]],
[[[5], [7]], [[13], [15]]],
[[[6], [8]], [[14], [16]]]]
输出张量具有形状 [1, 4, 4, 1] 和 值:
x = [[[1], [2], [3], [4]],
[[5], [6], [7], [8]],
[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]
(4)对于以下输入的形状 [8, 1, 2, 1] 和 BLOCK_SIZE 2:
x = [[[[1], [3]]], [[[9], [11]]], [[[2], [4]]], [[[10], [12]]],
[[[5], [7]]], [[[13], [15]]], [[[6], [8]]], [[[14], [16]]]]
输出张量具有形状 [2, 2, 4, 1] 和 值:
x = [[[[1], [3]], [[5], [7]]],
[[[2], [4]], [[10], [12]]],
[[[5], [7]], [[13], [15]]],
[[[6], [8]], [[14], [16]]]]
tf.batch_to_space_nd
batch_to_space_nd (
input,
block_shape ,
crops,
name = None
)
参见指南:张量变换>分割和连接
T 型的 n-D 张量的 BatchToSpace.
此操作将 "批处理" 维度0重塑为形状 block_shape + [batch] 的 M + 1 维度, 将这些块重新交错到空间维度定义的网格 [1,..., M], 以获得与输入相同的秩的结果.这个中间结果的空间维度, 可以根据作物选择裁剪产生输出.这与 SpaceToBatch 相反.请参见下面的详细描述.
ARGS:
- input:张量.N - D 具有形状 input_shape = [batch] + spatial_shape + remaining_shape,其中 spatial_shape 具有 M 个维度.
- block_shape:张量.必须是以下类型之一:int32,int64.1-D 形状 [M],所有值必须> = 1.
- crops:张量.必须是以下类型之一:int32,int64.2-D 具有形状 [M, 2],所有值必须> = 0.crops[i] = [crop_start, crop_end] 指定从输入维度裁剪的量 i + 1,这对应于空间维度 i.需要 crop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1].此操作等同于以下步骤:
- 重塑 input 为 reshaped 形状:[block_shape [0],...,block_shape [M-1],batch / prod(block_shape),input_shape [1],...,input_shape [N-1]]
- reshaped 产生 permuted 形状的允许尺寸 [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]] - 重塑 permuted 以产生 reshaped_permuted 的形状 [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]] - 裁剪尺寸的开始和结束 [1, ..., M] 的 reshaped_permuted 根据 crops,以产生形状的输出:[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]]
一些例子:
(1)对于以下输入的形状 [4, 1, 1, 1],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:
[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
输出的张量具有形状 [1, 2, 2, 1] 和值:
x = [[[[1], [2]], [[3], [4]]]]
(2)对于以下输入的形状 [4, 1, 1, 3],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:
[[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
输出的张量具有形状 [1, 2, 2, 3] 和值:
x = [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]]
(3)对于下列输入 [4, 2, 2, 1],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:
x = [[[[1], [3]], [[9], [11]]], [[[2], [4]], [[10], [12]]], [[[5], [7]], [[13], [15]]], [[[6], [8]], [[14], [16]]]]
输出的张量具有形状 [1, 4, 4, 1] 和值:
x = [[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]
(4)对于下列输入 [8, 1, 3, 1],block_shape = [2, 2] 和 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]]]]
输出的张量具有形状 [2, 2, 4, 1] 和值:
x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]]], [[[9], [10], [11], [12]], [[13], [14], [15], [16]]]]
* name:操作的名称(可选).
返回:
返回张量,与 input 具有相同的类型.