Rozprasza „aktualizacje” na tensor kształtu „kształt” zgodnie z „indeksami”.
Rozprosz rzadkie „aktualizacje” według indywidualnych wartości w określonych „indeksach”. Ta operacja zwraca tensor wyjściowy o określonym kształcie. Ta operacja jest odwrotnością operatora tf.gather_nd
, który wyodrębnia wartości lub wycinki z danego tensora.
Ta operacja jest podobna do tf.tensor_scatter_nd_add
, z tą różnicą, że tensor jest inicjalizowany zerem. Wywołanie tf.scatter_nd(indices, updates, shape)
jest identyczne z wywołaniem `tf.tensor_scatter_nd_add(tf.zeros(kształt, aktualizacje.dtyp), indeksy, aktualizacje)`
Jeśli „indeksy” zawierają duplikaty, powiązane „aktualizacje” są gromadzone (sumowane) w tensorze wyjściowym.
OSTRZEŻENIE : W przypadku danych zmiennoprzecinkowych dane wyjściowe mogą być niedeterministyczne. Dzieje się tak dlatego, że kolejność stosowania aktualizacji jest niedeterministyczna, a w przypadku dodawania liczb zmiennoprzecinkowych w różnej kolejności wynikowy błąd aproksymacji liczbowej może się nieznacznie różnić. Jednak dane wyjściowe będą deterministyczne, jeśli włączono determinizm op poprzez tf.config.experimental.enable_op_determinism
.
„indeksy” to tensor całkowity zawierający indeksy w tensorze wyjściowym. Ostatni wymiar „wskaźników” może mieć co najwyżej rangę „kształtu”:
indeksy.kształt[-1] <= kształt.rank
Ostatni wymiar `indeksu` odpowiada indeksom elementów (jeśli `indices.shape[-1] = kształt.rank`) lub plasterkom (jeśli `indices.shape[-1] < kształt.rank`) wzdłuż wymiaru `indeksy .shape[-1]` z `kształt`.
„updates” to tensor o kształcie:
indeksy.kształt[:-1] + kształt[indeksy.kształt[-1]:]
Najprostszą formą operacji rozproszenia jest wstawienie poszczególnych elementów do tensora według indeksu. Rozważmy przykład, w którym chcesz wstawić 4 rozproszone elementy do tensora rangi 1 z 8 elementami.

W Pythonie ta operacja rozproszenia wyglądałaby następująco:
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]
Można także wstawić na raz całe wycinki tensora wyższego rzędu. Na przykład można wstawić dwa wycinki w pierwszym wymiarze tensora rangi 3 z dwiema macierzami o nowych wartościach.

W Pythonie ta operacja rozproszenia wyglądałaby następująco:
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]]]
Należy pamiętać, że na procesorze, jeśli zostanie znaleziony indeks spoza limitu, zwracany jest błąd. Jeśli na GPU zostanie znaleziony indeks spoza limitu, zostanie on zignorowany.
Metody publiczne
Wyjście <U> | jako wyjście () Zwraca symboliczny uchwyt tensora. |
statyczny <U, T numer rozszerzenia> RozrzutNd <U> | utwórz (zakres zakresu , indeksy argumentów <T>, aktualizacje argumentów <U>, kształt argumentów <T>) Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację ScatterNd. |
Wyjście <U> | wyjście () Nowy tensor o zadanym kształcie i aktualizacjach zastosowanych zgodnie z indeksami. |
Metody dziedziczone
Metody publiczne
publiczne wyjście <U> asOutput ()
Zwraca symboliczny uchwyt tensora.
Dane wejściowe operacji TensorFlow są wynikami innej operacji TensorFlow. Ta metoda służy do uzyskania symbolicznego uchwytu reprezentującego obliczenia danych wejściowych.
public static ScatterNd <U> utwórz (zakres zakresu , indeksy argumentów <T>, aktualizacje argumentów <U>, kształt argumentów <T>)
Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację ScatterNd.
Parametry
zakres | aktualny zakres |
---|---|
indeksy | Tensor indeksów. |
aktualizacje | Wartości do rozproszenia na tensorze wyjściowym. |
kształt | 1-D. Kształt tensora wyjściowego. |
Powroty
- nowa instancja ScatterNd
publiczne wyjście <U> wyjście ()
Nowy tensor o zadanym kształcie i aktualizacjach zastosowanych zgodnie z indeksami.