ScatterNd

パブリック最終クラスScatterNd

「インデックス」に従って新しいテンソルに「更新」を分散します。

インデックスに従って、指定された `shape` のテンソル (最初は数値の場合は 0、文字列の場合は空) 内の個々の値またはスライスにスパースの `updates` を適用することにより、新しいテンソルを作成します。この演算子は、指定されたテンソルから値またはスライスを抽出する `tf.gather_nd` 演算子の逆です。

この操作は、tensor がゼロで初期化されることを除いて、tensor_scatter_add に似ています。 `tf.scatter_nd(indices,values,shape)` の呼び出しは、`tensor_scatter_add(tf.zeros(shape,values.dtype), indices,values)` と同じです。

「インデックス」に重複が含まれている場合、その更新は累積 (合計) されます。

警告: 更新が適用される順序は非決定的であるため、「インデックス」に重複が含まれる場合、出力も非決定的になります。数値近似の問題により、異なる順序で数値を合計すると異なる結果が生じる可能性があります。

`indices` は、形状 `shape` の新しいテンソルへのインデックスを含む整数テンソルです。 `index` の最後の次元は、最大でも `shape` のランクになります。

インデックス.形状[-1] <= 形状.ランク

`indices` の最後の次元は、次元 `indices` に沿った要素へのインデックス (`indices.shape[-1] = Shape.rank` の場合) またはスライス (`indices.shape[-1] <shape.rank` の場合) に対応します。 .shape[-1]` の `shape`。 「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([[0], [2]])
     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)
 
結果のテンソルは次のようになります。

[[[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]]、[[0、0、0、0]、[0、0、0、0]、[0 、0、0、0]、[0、0、0、0]]]

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

パブリックメソッド

出力<U>
asOutput ()
テンソルのシンボリック ハンドルを返します。
static <U, T extends Number> ScatterNd <U>
create (スコープスコープ、オペランド<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>出力()

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