ScatterNd

パブリックファイナルクラスScatterNd

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

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

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

`indices`に重複が含まれている場合、それらの更新は累積(合計)されます。

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

`indexes`は、形状` shape`の新しいテンソルへのインデックスを含む整数テンソルです。 `indices`の最後の次元は、せいぜい` shape`のランクにすることができます。

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

`indices`の最後の次元は、次元`インデックスに沿った要素( `indices.shape [-1] = shape.rank`の場合)またはスライス(` indexs.shape [-1] <shape.rank`の場合)へのインデックスに対応します`shape`の.shape [-1]`。 `updates`は形のあるテンソルです

indexs.shape [:-1] + shape [indices.shape [-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 ScatterNd <U> create スコープスコープ、オペランド<T>インデックス、オペランド<U>更新、オペランド<T>形状)

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

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

public Output <U> output ()

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