TensorFlow张量变换:tf.space_to_batch_nd函数
tf.space_to_batch_nd 函数
space_to_batch_nd(
input,
block_shape,
paddings,
name=None
)
参见指南:张量变换>分割和连接
用于 T 型的N维张量的 SpaceToBatch.
此操作将输入的 "空间(spatial)" 维度 [1,..., M] 划分为一个形状 block_shape 块的网格,并将这些块与 "批" 维数 (0)交错,这样在输出中,空间维度[1,..., M] 对应于网格内的位置,并且批处理维度将空间块中的位置和原始批处理位置组合在一起.在划分成块之前, 输入的空间维度根据填充可选地是零填充的.请参见下面的详细描述.
函数参数
- input:一个Tensor;是N维的并且具有形状input_shape = [batch] + spatial_shape + remaining_shape,其中spatial_shape有M维度.
- block_shape:一个Tensor;必须是以下类型之一:int32,int64;1-D,并且具有形状[M],所有值必须>=1.
- paddings:一个Tensor;必须是以下类型之一:int32,int64;二维,并且带有形状[M, 2],所有值必须>=0. paddings[i] = [pad_start, pad_end]为输入维度为i + 1指定填充,这对应于空间维度i.这需要block_shape[i]划分input_shape[i + 1] + pad_start + pad_end.该操作相当于以下步骤:
- 输入的维度为[1, ..., M]的零填充的起始和结束是根据paddings产生形状padded_shape的padded.
- 重塑padded到reshaped_padded形状:
[batch] + [padded_shape[1] / block_shape[0], block_shape[0], ..., padded_shape[M] / block_shape[M-1], block_shape[M-1]] + remaining_shape
- 排列reshaped_padded的维度以产生permuted_reshaped_padded的形状:
block_shape + [batch] + [padded_shape[1] / block_shape[0], ..., padded_shape[M] / block_shape[M-1]] + remaining_shape
- 重塑permuted_reshaped_padded,将block_shape添加到batch维度中,产生形状的输出张量:
[batch * prod(block_shape)] + [padded_shape[1] / block_shape[0], ..., padded_shape[M] / block_shape[M-1]] + remaining_shape
(1)以下形状为[1, 2, 2, 1]的输入中,block_shape = [2, 2],并且paddings = [[0, 0], [0, 0]]:x = [[[[1], [2]], [[3], [4]]]]
输出张量具有形状[4, 1, 1, 1]和值:
[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
(2)以下形状为[1, 2, 2, 3]的输入中,block_shape = [2, 2],并且paddings = [[0, 0], [0, 0]]:
x = [[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]]
输出张量具有形状[4, 1, 1, 3]和值:
[[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
(3)以下形状为[1, 4, 4, 1]的输入中,block_shape = [2, 2],并且paddings = [[0, 0], [0, 0]]:
x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]], [[9], [10], [11], [12]], [[13], [14], [15], [16]]]]
输出张量具有形状[4, 2, 2, 1]和值:
x = [[[[1], [3]], [[9], [11]]], [[[2], [4]], [[10], [12]]], [[[5], [7]], [[13], [15]]], [[[6], [8]], [[14], [16]]]]
(4)以下形状为[2, 2, 4, 1]的输入中,block_shape = [2, 2],并且paddings = [[0, 0], [2, 0]]:
x = [[[[1], [2], [3], [4]], [[5], [6], [7], [8]]], [[[9], [10], [11], [12]], [[13], [14], [15], [16]]]]
输出张量具有形状[8, 1, 3, 1]和值:
x = [[[[0], [1], [3]]], [[[0], [9], [11]]], [[[0], [2], [4]]], [[[0], [10], [12]]], [[[0], [5], [7]]], [[[0], [13], [15]]], [[[0], [6], [8]]], [[[0], [14], [16]]]]
除此之外,这个操作对于减少卷积成正则卷积非常有用,其中,name:操作的名称(可选).
函数返回
tf.space_to_batch_nd函数返回一个Tensor,它与input具有相同的类型.