「インデックス」に従って、既存のテンソルにスパースの「更新」を追加します。
この操作は、渡された `tensor` にスパースの `updates` を追加することによって、新しい tensor を作成します。この操作は `tf.scatter_nd_add` と非常に似ていますが、更新が (変数ではなく) 既存のテンソルに追加される点が異なります。既存のテンソルのメモリを再利用できない場合は、コピーが作成されて更新されます。
`indices` は、形状 `tensor.shape` の新しいテンソルへのインデックスを含む整数テンソルです。 `indices` の最後の次元は、最大でも `tensor.shape` のランクになります。
indices.shape[-1] <= tensor.shape.rank
`indices` の最後の次元は、要素 (`indices.shape[-1] = tensor.shape.rank` の場合) またはスライス (`indices.shape[-1] < tensor.shape.rank` の場合) へのインデックスに対応します。 `tensor.shape` の次元 `indices.shape[-1]` に沿って。 「updates」は形状を持つテンソルです
indices.shape[:-1] + tensor.shape[indices.shape[-1]:]
tensor_scatter_add の最も単純な形式は、インデックスによって個々の要素をテンソルに追加することです。たとえば、8 つの要素を持つランク 1 のテンソルに 4 つの要素を追加したいとします。
Python では、この散乱加算操作は次のようになります。
indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
tensor = tf.ones([8], dtype=tf.int32)
updated = tf.tensor_scatter_nd_add(tensor, indices, updates)
print(updated)
結果のテンソルは次のようになります。[1、12、1、11、10、1、1、13]
また、より高いランクのテンソルのスライス全体を一度に挿入することもできます。たとえば、新しい値の 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]]])
tensor = tf.ones([4, 4, 4],dtype=tf.int32)
updated = tf.tensor_scatter_nd_add(tensor, indices, updates)
print(updated)
結果のテンソルは次のようになります。[[[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]], [[1, 1, 1] 、1]、[1、1、1、1]、[1、1、1、1]、[1、1、1、1]]、[[6、6、6、6]、[7、7] 、7、7]、[8、8、8、8]、[9、9、9、9]]、[[1、1、1、1]、[1、1、1、1]、[1 、1、1、1]、[1、1、1、1]]]
CPU では、範囲外のインデックスが見つかった場合、エラーが返されることに注意してください。 GPU では、範囲外のインデックスが見つかった場合、そのインデックスは無視されます。
パブリックメソッド
出力<T> | asOutput () テンソルのシンボリック ハンドルを返します。 |
static <T, U extends Number> TensorScatterAdd <T> | |
出力<T> | 出力() テンソルからコピーされた新しいテンソルと、インデックスに従って追加された更新。 |
継承されたメソッド
パブリックメソッド
public Output <T> asOutput ()
テンソルのシンボリック ハンドルを返します。
TensorFlow オペレーションへの入力は、別の TensorFlow オペレーションの出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。
public static TensorScatterAdd <T> create (スコープスコープ、オペランド<T>テンソル、オペランド<U>インデックス、オペランド<T>更新)
新しい TensorScatterAdd オペレーションをラップするクラスを作成するファクトリ メソッド。
パラメーター
範囲 | 現在のスコープ |
---|---|
テンソル | コピー/更新する Tensor。 |
インデックス | インデックステンソル。 |
アップデート | 出力に分散する更新。 |
戻り値
- TensorScatterAdd の新しいインスタンス