阅读(4.7k) 书签 (0)

TensorFlow函数教程:tf.nn.space_to_depth

2019-02-12 18:05 更新

tf.nn.space_to_depth函数

别名:

  • tf.nn.space_to_depth
  • tf.space_to_depth
tf.nn.space_to_depth(
    input,
    block_size,
    name=None,
    data_format='NHWC'
)

定义在:tensorflow/python/ops/array_ops.py。

T型张量的SpaceToDepth

将空间数据块重新排列为深度。更具体地说,该操作输出输入张量的副本,其中来自height 和width维度的值被移动到depth维度。attr block_size表示输入块大小。

  • 大小为block_size x block size的非重叠块在每个位置重新排列为深度。
  • 输出张量的深度是block_size * block_size * input_depth。
  • 输入的每个块内的Y,X坐标成为输出通道索引的高阶分量。
  • 输入张量的height和width必须可被block_size整除。

data_format属性指定输入和输出张量的布局与下列选项:

  • “NHWC”:[ batch, height, width, channels ]
  • “NCHW”:[ batch, channels, height, width ] 
  • “NCHW_VECT_C”: qint8 [ batch, channels / 4, height, width, 4 ]

将操作视为转换6-D张量很有用。例如,对于data_format = NHWC,输入张量中的每个元素都可以通过6个坐标指定,通过降低内存布局的重要性来排序:n,oY,bY,oX,bX,iC(其中n =批处理索引,oX,oY表示输出图像中的X或Y坐标,bX,bY表示输入块内的坐标,iC表示输入通道)。输出将是以下布局的转置:n,oY,oX,bY,bX,iC

此操作对于调整卷积之间的激活(但保留所有数据)非常有用,例如,不是池化。它对于训练purely卷积模型也很有用。

例如,给定一个输入,其shape为[1, 2, 2, 1],data_format =“NHWC”和block_size = 2:

x = [[[[1], [2]],
      [[3], [4]]]]

此操作将输出一个shape为[1, 1, 1, 4]的张量:

[[[[1, 2, 3, 4]]]]

这里,输入的批处理为1,每个批处理元素都有shape [2, 2, 1],相应的输出将具有单个元素(即width和height均为1),并且深度为4个通道(1 * block_size * block_size)。输出元素的shape是[1, 1, 4]。

对于具有较大深度的输入张量,这里的shape为[1, 2, 2, 3],例如:

x = [[[[1, 2, 3], [4, 5, 6]],
      [[7, 8, 9], [10, 11, 12]]]]

对于block_size为2,此操作将返回以下shape为[1, 1, 1, 12]的张量:

[[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]]]

同样,对于以下shape为[1 4 4 1],且块大小为2的输入:

x = [[[[1],   [2],  [5],  [6]],
      [[3],   [4],  [7],  [8]],
      [[9],  [10], [13],  [14]],
      [[11], [12], [15],  [16]]]]

操作符将返回以下shape为[1 2 2 4]的张量:

x = [[[[1, 2, 3, 4],
       [5, 6, 7, 8]],
      [[9, 10, 11, 12],
       [13, 14, 15, 16]]]]

参数:

  • input:一个Tensor。
  • block_size:>= 2的int。空间块的大小。
  • data_format:可选的string,可以是:"NHWC", "NCHW", "NCHW_VECT_C"。默认为"NHWC"。
  • name:操作的名称(可选)。

返回:

一个Tensor,与input具有相同的类型。