我正在實施球面上的k-means,從@ dga的gist開始。 單位範數約束基本上意味着使用內積而不是成對距離,使用argmax
而不是argmin
和sum +歸一化來代替平均來更新質心。使用布爾值掩碼和索引列表替換Tensorflow中的某些行的一些行
現在我試圖用最少的表示數據點來替換死亡的質心。 unsorted_segment_sum
將返回0之死重心:
total = tf.unsorted_segment_sum(points, best_centroids, K)
從這個我弄不死質心的布爾掩碼:
deads = tf.equal(total, 0)
...死了質心的計數:
dead_count = tf.reduce_sum(tf.as_type(deads, 'int64'))
...並且最後列出了當前模型中表示最差的數據點的索引:
_, dead_replacement_idx = tf.nn.top_k(-assignment_qualities,
k=dead_count, sorted=False)
現在我該如何更換死質心? 在numpy的這個現在將回落到這一點:
means[deads] = points[dead_replacement_idx]
我怎樣才能做到在Tensorflow類似的東西?
https://github.com/tensorflow/tensorflow/issues/206 ...我覺得有人正在開始工作 –