Dodaje rzadkie „aktualizacje” do istniejącego tensora zgodnie z „indeksami”.
Ta operacja tworzy nowy tensor poprzez dodanie rzadkich „aktualizacji” do przekazanego „tensora”. Ta operacja jest bardzo podobna do `tf.scatter_nd_add`, z tą różnicą, że aktualizacje są dodawane do istniejącego tensora (a nie do zmiennej). Jeśli nie można ponownie wykorzystać pamięci istniejącego tensora, tworzona jest i aktualizowana kopia.
`indices` jest tensorem całkowitym zawierającym indeksy w nowym tensorze kształtu `tensor.shape`. Ostatni wymiar „indeksów” może mieć co najwyżej rangę „tensor.shape”:
indeksy.kształt[-1] <= tensor.kształt.rank
Ostatni wymiar `indices` odpowiada indeksom na elementy (jeśli `indices.shape[-1] = tensor.shape.rank`) lub plasterki (jeśli `indices.shape[-1] < tensor.shape.rank`) wzdłuż wymiaru „indices.shape[-1]” elementu „tensor.shape”. „aktualizacje” to tensor z kształtem
indeksy.kształt[:-1] + tensor.kształt[indeksy.kształt[-1]:]
Najprostszą formą tensor_scatter_add jest dodanie poszczególnych elementów do tensora według indeksu. Załóżmy na przykład, że chcemy dodać 4 elementy do tensora rangi 1 z 8 elementami.
W Pythonie ta operacja dodawania rozproszenia wyglądałaby następująco:
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]
Możemy także wstawić na raz całe wycinki tensora wyższego rzędu. Na przykład, gdybyśmy chcieli wstawić dwa wycinki w pierwszym wymiarze tensora rangi 3 z dwiema macierzami o nowych wartościach.
W Pythonie ta operacja dodawania rozproszenia wyglądałaby następująco:
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]]]
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.
Stałe
Smyczkowy | OP_NAME | Nazwa tej operacji znana silnikowi rdzenia TensorFlow |
Metody publiczne
Wyjście <T> | jako wyjście () Zwraca symboliczny uchwyt tensora. |
statyczny <T rozszerza TType > TensorScatterNdAdd <T> | |
Wyjście <T> | wyjście () Nowy tensor skopiowany z tensora i dodane aktualizacje zgodnie z indeksami. |
Metody dziedziczone
Stałe
publiczny statyczny końcowy ciąg znaków OP_NAME
Nazwa tej operacji znana silnikowi rdzenia TensorFlow
Metody publiczne
publiczne wyjście <T> 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 TensorScatterNdAdd <T> create (zakres zakresu , tensor argumentu <T>, argument <? rozszerza TNumber > indeksy, aktualizacje argumentu <T>)
Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację TensorScatterNdAdd.
Parametry
zakres | aktualny zakres |
---|---|
napinacz | Tensor do kopiowania/aktualizowania. |
indeksy | Tensor indeksu. |
aktualizacje | Aktualizacje do rozproszenia na wyjściu. |
Powroty
- nowa instancja TensorScatterNdAdd
publiczne wyjście <T> wyjście ()
Nowy tensor skopiowany z tensora i dodane aktualizacje zgodnie z indeksami.