TensorFlow函数教程:tf.nn.space_to_depth
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具有相同的类型。