TensorFlow:tf.space_to_depth函数
tf.space_to_depth 函数
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乘block size大小的块,在每个位置重新排列成深度.
- 输出张量的深度是block_size * block_size * input_depth.
- 输入的每个块内的Y、X坐标成为输出通道索引的高阶分量.
- 输入张量的高度和宽度必须能被block_size整除.
data_formatATTR用以下选项指定输入和输出张量的布局:“NHWC”:[ batch, height, width, channels ];“NCHW”:[ batch, channels, height, width ];“NCHW_VECT_C”:qint8 [ batch, channels / 4, height, width, channels % 4 ]
将操作视为转换6维张量是有用的.例如,对于data_format = NHWC,可以通过6个坐标指定输入张量中的每个元素,按照减小的存储器布局重要性排序为:n,oY,bY,oX,bX,iC(其中n =批索引,oX,oY表示X或输出图像中的Y坐标,bX,bY表示输入块内的坐标,iC表示输入通道).输出将是以下布局的转置:n,oY,oX,bY,bX,iC
这个操作对调整卷积之间的激活(但保留所有数据)是有用的,例如,而不是池.这对纯粹卷积模型的训练也很有用.
例如,给定一个形状的输入[1, 2, 2, 1],data_format =“NHWC”和block_size = 2:
x = [[[[1], [2]],
[[3], [4]]]]
这个操作会输出一个形状为[1, 1, 1, 4]的张量:
[[[[1, 2, 3, 4]]]]
在这里,输入的批量为1,每个批量元素都有形状[2, 2, 1],相应的输出将有一个单一的元素(即宽度和高度均为1),并且将具有4个通道(1 * block_size * block_size)的深度.输出元素的形状是[1, 1, 4].
对于一个深度较大的输入张量,这里的形状[1, 2, 2, 3],例如:
x = [[[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]]]
这个操作,对于2的block_size,将返回下面的形状为[1, 1, 1, 12]的张量:
[[[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]]]
同样,对于以下输入的形状[1 4 4 1],块大小为2:
x = [[[[1], [2], [5], [6]],
[[3], [4], [7], [8]],
[[9], [10], [13], [14]],
[[11], [12], [15], [16]]]]
操作将返回下面形状为[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:操作的名称(可选).
函数返回
tf.space_to_depth函数返回Tensor,它与input具有相同的类型.