'Güncellemeleri' 'indekslere' göre yeni bir tensöre dağıtın.
İndekslere göre verilen "şeklin" tensörü (başlangıçta sayısal için sıfır, dize için boş) içindeki bireysel değerlere veya dilimlere seyrek "güncellemeler" uygulayarak yeni bir tensör oluşturur. Bu operatör, belirli bir tensörden değerleri veya dilimleri çıkaran tf.gather_nd
operatörünün tersidir.
Bu işlem, tensörün sıfır-başlatılmış olması dışında tensor_scatter_add işlemine benzer. tf.scatter_nd(indices, values, shape)
çağrılması `tensor_scatter_add(tf.zeros(shape, value.dtype), indisler, değerler)` ile aynıdır.
'Endeksler' kopyalar içeriyorsa, bunların güncellemeleri toplanır (toplanır).
UYARI : Güncellemelerin uygulanma sırası belirleyici değildir, bu nedenle 'endeksler' kopyalar içeriyorsa çıktı belirleyici olmayacaktır; bazı sayısal yaklaşım sorunlarından dolayı, farklı sırayla toplanan sayılar farklı sonuçlar verebilir.
'indeksler', yeni bir şekil 'şekli' tensörüne endeksler içeren bir tamsayı tensörüdür. 'Endekslerin' son boyutu en fazla 'şekil'in sıralaması olabilir:
indeksler.şekil[-1] <= şekil.sıralama
"İndekslerin" son boyutu, "indeksler" boyutu boyunca öğeler halindeki indekslere (eğer "indeks.şekil[-1] = şekil.rank") veya dilimlere (eğer "indeks.şekil[-1] < şekil.rank") karşılık gelir "şekil"in .şekli[-1]'. 'güncellemeler' şekilli bir tensördür
indeksler.şekil[:-1] + şekil[indisler.şekil[-1]:]
Saçılımın en basit biçimi, tek tek elemanları bir tensöre indekse göre eklemektir. Örneğin, 8 elemanlı bir derece 1 tensöre 4 dağınık eleman eklemek istediğimizi varsayalım.
Python'da bu dağılım işlemi şöyle görünecektir:
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]
Ayrıca daha yüksek dereceli bir tensörün tüm dilimlerini bir kerede ekleyebiliriz. Örneğin, bir rütbe-3 tensörün ilk boyutuna iki yeni değer matrisine sahip iki dilim eklemek istersek.
Python'da bu dağılım işlemi şöyle görünecektir:
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'da sınır dışı bir dizin bulunursa bir hata döndürüleceğini unutmayın. GPU'da sınır dışı bir dizin bulunursa dizin dikkate alınmaz.
Sabitler
Sicim | OP_NAME | Bu operasyonun TensorFlow çekirdek motoru tarafından bilinen adı |
Genel Yöntemler
Çıkış <U> | Çıkış olarak () Tensörün sembolik tutamacını döndürür. |
static <U TType'ı genişletir, T TNumber'ı genişletir > ScatterNd <U> | |
Çıkış <U> | çıktı () Verilen şekle sahip yeni bir tensör ve endekslere göre uygulanan güncellemeler. |
Kalıtsal Yöntemler
Sabitler
genel statik son Dize OP_NAME
Bu operasyonun TensorFlow çekirdek motoru tarafından bilinen adı
Genel Yöntemler
genel Çıkış <U> asOutput ()
Tensörün sembolik tutamacını döndürür.
TensorFlow işlemlerinin girdileri, başka bir TensorFlow işleminin çıktılarıdır. Bu yöntem, girişin hesaplanmasını temsil eden sembolik bir tanıtıcı elde etmek için kullanılır.
public static ScatterNd <U> create ( Kapsam kapsamı, İşlenen <T> endeksleri, İşlenen <U> güncellemeleri, İşlenen <T> şekli)
Yeni bir ScatterNd işlemini saran bir sınıf oluşturmak için fabrika yöntemi.
Parametreler
kapsam | mevcut kapsam |
---|---|
endeksler | İndeks tensörü. |
güncellemeler | Çıktıya dağıtılacak güncellemeler. |
şekil | 1-D. Ortaya çıkan tensörün şekli. |
İade
- ScatterNd'nin yeni bir örneği
genel Çıkış <U> çıkışı ()
Verilen şekle sahip yeni bir tensör ve endekslere göre uygulanan güncellemeler.