TensorFlow數(shù)據(jù)從深度排列為空間數(shù)據(jù)塊

2018-09-26 17:20 更新

tf.depth_to_space

depth_to_space ( 
    input , 
    block_size , 
    name = None
 )

參見(jiàn)指南:張量變換>分割和連接

T 型張量的 DepthToSpace.

將數(shù)據(jù)從深度重新排列為空間數(shù)據(jù)塊.這是 SpaceToDepth 的逆向轉(zhuǎn)換.更具體地說(shuō),此 op 輸出輸入張量的一個(gè)副本,其中來(lái)自深度維度的值在空間塊中移動(dòng)到高度和寬度維度.attr block_size 表示輸入塊的大小以及數(shù)據(jù)的移動(dòng)方式.

  • 從深度大小為 block_size * block_size 的數(shù)據(jù)塊重新排列成不重疊的大小為 block_size x block_size 的數(shù)據(jù)塊.
  • 輸出張量的寬度為 input_depth * block_size,而高度是 input_height * block_size.
  • 輸入張量的深度必須可以被 block_size * block_size 整除.

即,假設(shè)輸入的形狀是:[batch, height, width, depth],輸出的形狀為:[batch, height*block_size, width*block_size, depth/(block_size*block_size)];

這個(gè)操作要求輸入的張量的秩為 4,并且 block_size > = 1 ,并且 block_size * block_size 是輸入深度的除數(shù).

此操作對(duì)于調(diào)整卷積(但保留所有數(shù)據(jù))之間的激活是有用的,例如代替池.它也可用于訓(xùn)練純卷積模型.

例如,給定此輸入的形狀[1, 1, 1, 4],并且塊大小為2:

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

此操作將輸出一個(gè)形狀為 [1, 2, 2, 1] 的張量:

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

這里,輸入的批次為1,每個(gè)批次元素都有形狀 [1, 1, 4],相應(yīng)的輸出將具有2×2個(gè)元素,并具有1個(gè)通道,深度為:1 = 4 / (block_size * block_size).輸出元素的形狀是[2, 2, 1].

對(duì)于具有較大深度的輸入張量,這里的形狀為 [1, 1, 1, 12],例如:

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

如果塊大小為2,則此操作將返回以下形狀為 [1, 2, 2, 3] 的張量:

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

類似地,對(duì)于以下輸入的形狀 [1 2 2 4],并且塊大小為2,有:

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

運(yùn)算符將返回以下張量 [1 4 4 1]:

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

ARGS:

  • input:一個(gè)張量.
  • block_size:是一個(gè) int 并且大于等于 2.空間塊的大小,與Space2Depth中的相同.
  • name:操作的名稱(可選).

返回:

返回一個(gè)張量,與 input 具有相同的類型.


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)