TensorFlow BatchToSpace的使用

2018-09-06 09:59 更新
tf.batch_to_space
batch_to_space (
input,
crops,
block_size ,
name = None
)

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

參見指南:張量變換>分割和連接

用于 T 型的4維張量的 BatchToSpace.

這是更通用的 BatchToSpaceND 的舊版本.

將批處理 (permutes) 數(shù)據(jù)重新排列到空間數(shù)據(jù)塊中,然后進(jìn)行裁剪.這是 SpaceToBatch 的逆向轉(zhuǎn)換.更具體地說,此操作輸出輸入張量的一個副本,其中,批處理維度中的值在空間塊中移動到高度和寬度維度,然后沿高度和寬度尺寸進(jìn)行裁剪.

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] 的非負(fù)整數(shù)的2維張量.它指定從空間維度的中間結(jié)果中裁剪多少元素,如下所示:
    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 維度, 將這些塊重新交錯到空間維度定義的網(wǎng)格 [1,..., M], 以獲得與輸入相同的秩的結(jié)果.這個中間結(jié)果的空間維度, 可以根據(jù)作物選擇裁剪產(chǎn)生輸出.這與 SpaceToBatch 相反.請參見下面的詳細(xì)描述.

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,這對應(yīng)于空間維度 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 產(chǎn)生 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 以產(chǎn)生 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. 裁剪尺寸的開始和結(jié)束 [1, ..., M] 的 reshaped_permuted 根據(jù) crops,以產(chǎn)生形狀的輸出:[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 具有相同的類型.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號