ScatterNd

パブリック最終クラスScatterNd

`updates` を `index` に従って形状 `shape` のテンソルに分散します。

指定された「インデックス」の個々の値に従って、まばらな「更新」を分散させます。この op は、指定した `shape` を持つ出力テンソルを返します。この op は、指定されたテンソルから値またはスライスを抽出するtf.gather_nd演算子の逆です。

この操作は、テンソルがゼロで初期化されることを除いて、 tf.tensor_scatter_nd_addに似ています。 tf.scatter_nd(indices, updates, shape)を呼び出すことは、`tf.tensor_scatter_nd_add(tf.zeros(shape, updates.dtype), indexs, updates)` を呼び出すことと同じです

`indices` に重複が含まれている場合、関連する `updates` は出力テンソルに蓄積 (合計) されます。

警告: 浮動小数点データ型の場合、出力は非決定論的である可能性があります。これは、更新が適用される順序が非決定論的であり、浮動小数点数が異なる順序で追加されると、結果の数値近似誤差がわずかに異なる可能性があるためです。ただし、 op determinism がtf.config.experimental.enable_op_determinismで有効になっている場合、出力は決定論的になります。

`indices` は、出力テンソルへのインデックスを含む整数テンソルです。 `indices` の最後の次元は、せいぜい `shape` のランクです。

index.shape[-1] <= shape.rank

`indices` の最後の次元は、要素 (`indices.shape[-1] = shape.rank` の場合) またはスライス (`indices.shape[-1] < shape.rank` の場合) のインデックスに対応します。 `shape` の .shape[-1]`。

`updates` は形状を持つテンソルです:

インデックス.シェイプ[:-1] + シェイプ[インデックス.シェイプ[-1]:]

散布操作の最も単純な形式は、個々の要素をインデックスによってテンソルに挿入することです。 8 つの要素を持つランク 1 テンソルに 4 つの分散要素を挿入する例を考えてみましょう。

Python では、この散布操作は次のようになります。

indices = tf.constant([[4], [3], [1], [7]])
     updates = tf.constant([9, 10, 11, 12])
     shape = tf.constant([8])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
結果のテンソルは次のようになります。

[0, 11, 0, 10, 9, 0, 0, 12]

高ランクのテンソルのスライス全体を一度に挿入することもできます。たとえば、新しい値の 2 つの行列を使用して、階数 3 テンソルの最初の次元に 2 つのスライスを挿入できます。

Python では、この分散操作は次のようになります。

indices = tf.constant([[1], [3]])
     updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]],
                            [[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
結果のテンソルは次のようになります。

[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5 , 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], [[0, 0, 0, 0], [0, 0] , 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5, 5], [6, 6, 6, 6], [7 、7、7、7]、[8、8、8、8]]]

CPU では、範囲外のインデックスが見つかった場合、エラーが返されることに注意してください。 GPU では、範囲外のインデックスが見つかった場合、そのインデックスは無視されます。

公開メソッド

出力<U>
asOutput ()
テンソルのシンボリック ハンドルを返します。
static <U, T extends Number> ScatterNd <U>
作成(スコープスコープ、オペランド<T> インデックス、オペランド<U> 更新、オペランド<T> 形状)
新しい ScatterNd 操作をラップするクラスを作成するファクトリ メソッド。
出力<U>
出力()
指定された形状とインデックスに従って更新が適用された新しいテンソル。

継承されたメソッド

公開メソッド

public Output <U> asOutput ()

テンソルのシンボリック ハンドルを返します。

TensorFlow 操作への入力は、別の TensorFlow 操作の出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。

public static Sc​​atterNd <U> create (スコープスコープ、オペランド<T> インデックス、オペランド<U> 更新、オペランド<T> 形状)

新しい ScatterNd 操作をラップするクラスを作成するファクトリ メソッド。

パラメーター
範囲現在のスコープ
インデックスインデックスのテンソル。
アップデート出力テンソルに分散する値。
1-D。出力テンソルの形状。
戻り値
  • ScatterNd の新しいインスタンス

public出力<U>出力()

指定された形状とインデックスに従って更新が適用された新しいテンソル。