Ich bin ein k-Mittel auf der Kugel, ausgehend von @ dga gist. Die Unit-Norm-Constraint bedeutet im Wesentlichen die Verwendung von inneren Produkten anstelle von paarweisen Distanzen unter Verwendung von argmax
anstelle von argmin
und Summe + Normalisierung anstelle der Mittelwertbildung, um die Schwerpunkte zu aktualisieren.Ersetzen Sie einige Zeilen einer Variablen in Tensorflow mit boolescher Maske und Indexliste
Jetzt versuche ich tote Zentroide durch die am wenigsten gut vertretenen Datenpunkte zu ersetzen. unsorted_segment_sum
wird eine Summe von 0 für tot Centroide zurück:
total = tf.unsorted_segment_sum(points, best_centroids, K)
Daraus ich eine boolean Maske von toten Centroide erhalten:
deads = tf.equal(total, 0)
... eine Zählung der Toten Centroide:
dead_count = tf.reduce_sum(tf.as_type(deads, 'int64'))
... und schließlich eine Liste mit den Indizes der Datenpunkte, die vom aktuellen Modell am schlechtesten dargestellt werden:
_, dead_replacement_idx = tf.nn.top_k(-assignment_qualities,
k=dead_count, sorted=False)
Wie kann ich die toten Zentroide ersetzen? In numpy würde dies nun kommen dazu etwa:
means[deads] = points[dead_replacement_idx]
Wie kann ich etwas ähnliches in Tensorflow tun?
https://github.com/tensorflow/tensorflow/issues/206 ... Ich glaube, jemand beginnt damit zu arbeiten –