Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

tf.tensor_scatter_nd_add

TensorFlow 1 wersja

Dodaje rzadki updates do istniejącego tensora według indices .

Operacja ta tworzy nowy tensor dodając rzadkie updates do przekazany tensor . Operacja ta jest bardzo podobna do tf.scatter_nd_add tym wyjątkiem, że aktualizacje są dodane do istniejącej tensora (w przeciwieństwie do zmienna). Jeśli pamięć dla istniejącego tensora nie mogą być ponownie wykorzystane, kopia wykonana i aktualizowana.

indices jest napinacz całkowitą zawierający wskaźniki do nowego tensora kształt tensor.shape . Ostatnim wymiarem indices może być co najwyżej rangi tensor.shape :

 indices.shape[-1] <= tensor.shape.rank
 

Ostatni wymiar indices odpowiada indeksom w elementy (jeśli indices.shape[-1] = tensor.shape.rank ) lub plastry (jeśli indices.shape[-1] < tensor.shape.rank ) wzdłuż wymiaru indices.shape[-1] z tensor.shape . updates to tensor z kształtu

 indices.shape[:-1] + tensor.shape[indices.shape[-1]:]
 

Najprostszą formą tensor_scatter_add jest dodanie do poszczególnych elementów tensora przez indeks. Na przykład, powiedzmy, że chcemy dodać 4 elementy w szeregowych tensora 1 z 8 elementów.

W Pythonie, operacja ta rozrzut dodatek będzie wyglądać 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)
 

Powstały tensor będzie wyglądać następująco:

 [1, 12, 1, 11, 10, 1, 1, 13]
 

Możemy również wstawić całe kromki wyższego rzędu tensora wszystkie naraz. Na przykład, jeśli chcemy wstawić dwie kromki w pierwszym wymiarze postój-3 tensora z dwóch matryc nowych wartości.

W Pythonie, operacja ta rozrzut dodatek będzie wyglądać 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)
 

Powstały tensor będzie wyglądać następująco:

 [[[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]]]
 

Zauważ, że na CPU, jeśli z indeksu związanego zostanie znaleziona, zwracany jest błąd. Na GPU, jeśli z indeksu związanego zostanie znaleziony, indeks jest ignorowany.

tensor Tensor . Tensor skopiować / aktualizację.
indices Tensor . Musi to być jeden z następujących typów: int32 , int64 . Indeks tensor.
updates Tensor . Muszą mieć ten sam typ jak tensor . Aktualizacje rozproszę na wyjściu.
name Nazwę operacji (opcjonalnie).

Tensor . Ma taki sam typ jak tensor .