BatchToSpace#
バージョン名: BatchToSpace-2
カテゴリー: データ移動
簡単な説明: BatchToSpace 操作は、指定された入力 data
のバッチ次元を、block_shape
入力で指定された空間次元のブロックに並べ替えます。次に、出力を生成するために、空間次元が crops_begin
と crops_end
入力に従ってオプションで切り取られます。
詳細な説明
BatchToSpace 操作は、出力テンソル [batch, D_1, D_2, ..., D_{N-1}]
の入力 data
および形状 [N]
の block_shape
、crops_begin
、crops_end
入力に対する次の演算ステップと同等です。
data
入力を再形成して、次の形状のテンソルを生成します:
の次元を並べ替えて、次の形状のテンソルを生成します:
を変形して、次の形状のテンソルを生成します:
crops_begin
とcrops_end
入力に従って の空間次元の開始と終了を切り取り、次の形状の出力 を生成します:
ここで、
= block_shape[i] は 1 であると予想されます = crops_begin[i] = crops_end[i] と は 0 であると予想されます
BatchToSpace 操作は、SpaceToBatch 操作の逆です。
属性: BatchToSpace 操作には属性がありません。
入力
1:
data
- タイプ T でランク 2 以上のテンソル。レイアウトは[batch, D_1, D_2 ... D_{N-1}]
(バッチ数、空間軸) です。必須。2:
block_shape
- 対応する空間軸に移動されるdata
入力のbatch
軸のブロックサイズを指定します。タイプ T_INT および形状[N]
の 1D テンソル。すべての要素の値は 1 以上である必要があります。block_shape[0]
は 1 であると予想されます。必須。3:
crops_begin
-data
入力の各軸に沿って最初から切り取る量を指定します。タイプ T_INT および形状[N]
の 1D テンソル。すべての要素の値は 0 以上である必要があります。crops_begin[0]
は 0 であると予想されます。必須。4:
crops_end
-data
入力の各軸に沿って終了点から切り取る量を指定します。タイプ T_INT および形状[N]
の 1D テンソル。すべての要素の値は 0 以上である必要があります。crops_end[0]
は 0 であると予想されます。必須。注:
N
は入力data
のランクに対応します。注:
data
入力のbatch
軸は、block_shape
要素の累積積で均等に割り切れる必要があります。注:
crops_begin[i] + crops_end[i] <= block_shape[i] * input_shape[i]
であることが必要です。
出力
1:
data
入力テンソルと同じランクおよび形状[batch / (block_shape[0] * block_shape[1] * ... * block_shape[N - 1]), D_1 * block_shape[1] - crops_begin[1] - crops_end[1], D_2 * block_shape[2] - crops_begin[2] - crops_end[2], ..., D_{N - 1} * block_shape[N - 1] - crops_begin[N - 1] - crops_end[N - 1]
を持つ T タイプの並べ替えられたテンソル。
タイプ
T: サポートされるタイプ。
T_INT: サポートされている整数タイプ。
例
例: 2D 入力テンソル data
<layer type="BatchToSpace" ...>
<input>
<port id="0"> <!-- data -->
<dim>10</dim> <!-- バッチ -->
<dim>2</dim> <!-- 空間次元 1 -->
</port>
<port id="1"> <!-- block_shape 値: [1, 5] -->
<dim>2</dim>
</port>
<port id="2"> <!-- crops_begin 値: [0, 2] -->
<dim>2</dim>
</port>
<port id="3"> <!-- crops_end 値: [0, 0] -->
<dim>2</dim>
</port>
</input>
<output>
<port id="3">
<dim>2</dim> <!-- data.shape[0] / (block_shape.shape[0] * block_shape.shape[1]) -->
<dim>8</dim> <!-- data.shape[1] * block_shape.shape[1] - crops_begin[1] - crops_end[1]-->
</port>
</output>
</layer>
例: 5D 入力テンソル data
<layer type="BatchToSpace" ...>
<input>
<port id="0"> <!-- data -->
<dim>48</dim> <!-- バッチ -->
<dim>3</dim> <!-- 空間次元 1 -->
<dim>3</dim> <!-- 空間次元 2 -->
<dim>1</dim> <!-- 空間次元 3 -->
<dim>3</dim> <!-- 空間次元 4 -->
</port>
<port id="1"> <!-- block_shape 値: [1, 2, 4, 3, 1] -->
<dim>5</dim>
</port>
<port id="2"> <!-- pads_begin 値: [0, 0, 1, 0, 0] -->
<dim>5</dim>
</port>
<port id="3"> <!-- pads_end 値: [0, 0, 1, 0, 0] -->
<dim>5</dim>
</port>
</input>
<output>
<port id="3">
<dim>2</dim> <!-- data.shape[0] / block_shape.shape[0] * block_shape.shape[1] *... * block_shape.shape[4]) -->
<dim>6</dim> <!-- data.shape[1] * block_shape.shape[1] - crops_begin[1] - crops_end[1]-->
<dim>10</dim> <!-- data.shape[2] * block_shape.shape[2] - crops_begin[2] - crops_end[2] -->
<dim>3</dim> <!-- data.shape[3] * block_shape.shape[3] - crops_begin[3] - crops_end[3] -->
<dim>3</dim> <!-- data.shape[4] * block_shape.shape[4] - crops_begin[4] - crops_end[4] -->
</port>
</output>
</layer>