阅读(1169) (9)

TensorFlow BatchToSpace的使用

2017-09-04 18:11:20 更新
tf.batch_to_space
batch_to_space (
input,
crops,
block_size ,
name = None
)

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

参见指南:张量变换>分割和连接

用于 T 型的4维张量的 BatchToSpace.

这是更通用的 BatchToSpaceND 的旧版本.

将批处理 (permutes) 数据重新排列到空间数据块中,然后进行裁剪.这是 SpaceToBatch 的逆向转换.更具体地说,此操作输出输入张量的一个副本,其中,批处理维度中的值在空间块中移动到高度和宽度维度,然后沿高度和宽度尺寸进行裁剪.

ARGS:

  • input:张量.4-D 张量与形状 [batch*block_size*block_size, height_pad/block_size, width_pad/block_size, depth].请注意,输入张量的批量大小必须可以被 block_size * block_size 整除.
  • crops:张量.必须是以下类型之一:int32,int64.具有形状 [2, 2] 的非负整数的2维张量.它指定从空间维度的中间结果中裁剪多少元素,如下所示:
    crops = [[crop_top, crop_bottom], [crop_left, crop_right]] 
    • block_size:一个 int 就是>= 2.
    • name:操作的名称(可选).

返回:

返回张量.具有与输入相同的类型.4维形状 [batch, height, width, depth],其中:

height = height_pad - crop_top - crop_bottom
width = width_pad - crop_left - crop_right

ATTR block_size 必须大于 1,它表示块的大小.

一些例子:

(1)对于以下输入的形状 [4, 1, 1, 1] 和 BLOCK_SIZE 为2:

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

输出张量具有形状 [1, 2, 2, 1] 和值:

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

(2)对于以下输入的形状 [4, 1, 1, 3] 和 BLOCK_SIZE 为2:

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

输出张量具有形状 [1, 2, 2, 3] 和 值:

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

(3)对于以下输入的形状 [4, 2, 2, 1] 和 BLOCK_SIZE 为2:

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

输出张量具有形状 [1, 4, 4, 1] 和 值:

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

(4)对于以下输入的形状 [8, 1, 2, 1] 和 BLOCK_SIZE 2:

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

输出张量具有形状 [2, 2, 4, 1] 和 值:

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

tf.batch_to_space_nd

batch_to_space_nd (
input,
block_shape ,
crops,
name = None
)

参见指南:张量变换>分割和连接

T 型的 n-D 张量的 BatchToSpace.

此操作将 "批处理" 维度0重塑为形状 block_shape + [batch] 的 M + 1 维度, 将这些块重新交错到空间维度定义的网格 [1,..., M], 以获得与输入相同的秩的结果.这个中间结果的空间维度, 可以根据作物选择裁剪产生输出.这与 SpaceToBatch 相反.请参见下面的详细描述.

ARGS:

  • input:张量.N - D 具有形状 input_shape = [batch] + spatial_shape + remaining_shape,其中 spatial_shape 具有 M 个维度.
  • block_shape:张量.必须是以下类型之一:int32,int64.1-D 形状 [M],所有值必须> = 1. 
  • crops:张量.必须是以下类型之一:int32,int64.2-D 具有形状 [M, 2],所有值必须> = 0.crops[i] = [crop_start, crop_end] 指定从输入维度裁剪的量 i + 1,这对应于空间维度 i.需要 crop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1].此操作等同于以下步骤:
    1. 重塑 input 为 reshaped 形状:[block_shape [0],...,block_shape [M-1],batch / prod(block_shape),input_shape [1],...,input_shape [N-1]]
    2. reshaped 产生 permuted 形状的允许尺寸 [batch / prod(block_shape)) 
      input_shape [1],block_shape [0],...,input_shape [M],block_shape [M-1]
      input_shape [M + 1],...,input_shape [N-1]]
    3. 重塑 permuted 以产生 reshaped_permuted 的形状 [batch / prod(block_shape),
       input_shape [1] * block_shape [0],...,input_shape [M] * block_shape [M-1]
      input_shape [M + 1],...,input_shape [N-1]]
    4. 裁剪尺寸的开始和结束 [1, ..., M] 的 reshaped_permuted 根据 crops,以产生形状的输出:[batch / prod(block_shape), 
      input_shape [1] * block_shape [0] - crops[0,0] - crops[0,1],...,input_shape [M] * block_shape [M-1] - crops[M-1,0] - crops[M-1,1],
      input_shape [M + 1],...,input_shape [N-1]]

一些例子:

(1)对于以下输入的形状 [4, 1, 1, 1],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:

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

       输出的张量具有形状 [1, 2, 2, 1] 和值:

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

(2)对于以下输入的形状 [4, 1, 1, 3],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:

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

       输出的张量具有形状 [1, 2, 2, 3] 和值:

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

(3)对于下列输入 [4, 2, 2, 1],block_shape = [2, 2] 和 crops = [[0, 0], [0, 0]]:

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

       输出的张量具有形状 [1, 4, 4, 1] 和值:

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

(4)对于下列输入 [8, 1, 3, 1],block_shape = [2, 2] 和 crops = [[0, 0], [2, 0]]:

       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]]]]

       输出的张量具有形状 [2, 2, 4, 1] 和值:

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

* name:操作的名称(可选).

返回:

返回张量,与 input 具有相同的类型.