タイプTのNDテンソルのSpaceToBatch。
この操作は、入力の「空間」次元 `[1、...、M]`を形状 `block_shape`のブロックのグリッドに分割し、これらのブロックを「バッチ」次元(0)でインターリーブします。 、空間次元 `[1、...、M]`はグリッド内の位置に対応し、バッチ次元は空間ブロック内の位置と元のバッチ位置の両方を組み合わせます。ブロックに分割する前に、入力の空間次元は、オプションで「パディング」に従ってゼロパディングされます。正確な説明については、以下を参照してください。
この操作は、次の手順と同等です。
1. `paddings`に従って、入力の次元` [1、...、M] `の開始と終了をゼロパッドして、形状` padded_shape`の `padded`を生成します。
2.`padded`を形状の `reshape_padded`に再形成します。
[バッチ] + [padded_shape [1] / block_shape [0]、block_shape [0]、...、padded_shape [M] / block_shape [M-1]、block_shape [M-1]] + remaining_shape
3. `reshape_padded`の寸法を並べ替えて、形状の` permuted_reshape_padded`を生成します。
block_shape + [batch] + [padded_shape [1] / block_shape [0]、...、padded_shape [M] / block_shape [M-1]] + remaining_shape
4. `permuted_reshape_padded`の形状を変更して、` block_shape`をバッチ次元に平坦化し、形状の出力テンソルを生成します。
[バッチ* 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]`で、値は次のとおりです。l10n 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] `、およびパディング=` [[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]]]]
です。とりわけ、この操作は、激しい畳み込みを通常の畳み込みに減らすのに役立ちます。 パブリックメソッド
出力<T> | asOutput () テンソルのシンボリックハンドルを返します。 |
static <T、Uは数値を拡張し、Vは数値を拡張> SpaceToBatchNd <T> | |
出力<T> | 出力() |
継承されたメソッド
パブリックメソッド
public Output <T> asOutput ()
テンソルのシンボリックハンドルを返します。
TensorFlow操作への入力は、別のTensorFlow操作の出力です。このメソッドは、入力の計算を表すシンボリックハンドルを取得するために使用されます。
public static SpaceToBatchNd <T> create (スコープスコープ、オペランド<T>入力、オペランド<U> blockShape、オペランド<V>パディング)
新しいSpaceToBatchNd操作をラップするクラスを作成するファクトリメソッド。
パラメーター
範囲 | 現在のスコープ |
---|---|
入力 | 形状が `input_shape = [batch] + Spatial_shape + Remaining_shape`のND。ここで、spatial_shapeの次元は` M`です。 |
blockShape | 形状が `[M]`の1-D、すべての値は> = 1でなければなりません。 |
パディング | 形状が `[M、2]`の2-D、すべての値は> = 0でなければなりません。`paddings[i] = [pad_start、pad_end] `は、空間次元に対応する入力次元` i + 1`のパディングを指定します`i`。 `block_shape [i]`が `input_shape [i + 1] + pad_start + pad_end`を分割する必要があります。 |
戻り値
- SpaceToBatchNdの新しいインスタンス