TensorFlow数据从深度排列为空间数据块
tf.depth_to_space
depth_to_space ( input , block_size , name = None )
参见指南:张量变换>分割和连接
T 型张量的 DepthToSpace.
将数据从深度重新排列为空间数据块.这是 SpaceToDepth 的逆向转换.更具体地说,此 op 输出输入张量的一个副本,其中来自深度维度的值在空间块中移动到高度和宽度维度.attr block_size 表示输入块的大小以及数据的移动方式.
- 从深度大小为 block_size * block_size 的数据块重新排列成不重叠的大小为 block_size x block_size 的数据块.
- 输出张量的宽度为 input_depth * block_size,而高度是 input_height * block_size.
- 输入张量的深度必须可以被 block_size * block_size 整除.
即,假设输入的形状是:[batch, height, width, depth],输出的形状为:[batch, height*block_size, width*block_size, depth/(block_size*block_size)];
这个操作要求输入的张量的秩为 4,并且 block_size > = 1 ,并且 block_size * block_size 是输入深度的除数.
此操作对于调整卷积(但保留所有数据)之间的激活是有用的,例如代替池.它也可用于训练纯卷积模型.
例如,给定此输入的形状[1, 1, 1, 4],并且块大小为2:
x = [[[[1, 2, 3, 4]]]]
此操作将输出一个形状为 [1, 2, 2, 1] 的张量:
[[[[1], [2]],
[[3], [4]]]]
这里,输入的批次为1,每个批次元素都有形状 [1, 1, 4],相应的输出将具有2×2个元素,并具有1个通道,深度为:1 = 4 / (block_size * block_size).输出元素的形状是[2, 2, 1].
对于具有较大深度的输入张量,这里的形状为 [1, 1, 1, 12],例如:
x = [[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]]]
如果块大小为2,则此操作将返回以下形状为 [1, 2, 2, 3] 的张量:
[[[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]]]
类似地,对于以下输入的形状 [1 2 2 4],并且块大小为2,有:
x = [[[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[9, 10, 11, 12],
[13, 14, 15, 16]]]]
运算符将返回以下张量 [1 4 4 1]:
x = [[ [1], [2], [5], [6]],
[ [3], [4], [7], [8]],
[ [9], [10], [13], [14]],
[ [11], [12], [15], [16]]]
ARGS:
- input:一个张量.
- block_size:是一个 int 并且大于等于 2.空间块的大小,与Space2Depth中的相同.
- name:操作的名称(可选).
返回:
返回一个张量,与 input 具有相同的类型.