阅读(10.3k) 书签 (0)

TensorFlow数据从深度排列为空间数据块

2018-09-26 17:20 更新

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 具有相同的类型.