TensorFlow張量變換:tf.space_to_batch_nd函數

2018-01-29 11:06 更新

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;二維,并且?guī)в行螤頪M, 2],所有值必須>=0. paddings[i] = [pad_start, pad_end]為輸入維度為i + 1指定填充,這對應于空間維度i.這需要block_shape[i]劃分input_shape[i + 1] + pad_start + pad_end.該操作相當于以下步驟:
    1. 輸入的維度為[1, ..., M]的零填充的起始和結束是根據paddings產生形狀padded_shape的padded.
    2. 重塑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            
    3. 排列reshaped_padded的維度以產生permuted_reshaped_padded的形狀:
      block_shape + [batch] + [padded_shape[1] / block_shape[0], ..., padded_shape[M] / block_shape[M-1]] + remaining_shape
    4. 重塑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具有相同的類型.

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號