ScatterNd

publiczna klasa końcowa ScatterNd

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 gdy liczby zmiennoprzecinkowe są dodawane 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 tak:

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)
 
Wynikowy tensor wyglądałby tak:

[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 tak:

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)
 
Wynikowy tensor wyglądałby tak:

[[[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.
Zwroty
  • nowa instancja ScatterNd

publiczne wyjście <U> wyjście ()

Nowy tensor o zadanym kształcie i aktualizacjach zastosowanych zgodnie z indeksami.