Обработка пустых кластеров с помощью TensorFlow - PullRequest
0 голосов
/ 29 марта 2019

GIven кластеров и образец Я хочу связать точки выборки с ближайшими кластерами.Теперь я хочу исправить побочный эффект, когда кластер остается пустым после этого процесса.Моя идея состояла в том, чтобы просто связать произвольную точку моих образцов с этим кластером.Мой код такой:

def assign_to_nearest(samples, centroids):
    # Finds the nearest centroid for each sample
    expanded_vectors = tf.cast(tf.expand_dims(samples, 0),tf.float64)
    expanded_centroids = tf.cast(tf.expand_dims(centroids, 1),tf.float64)
    distances = tf.reduce_sum(
                    tf.square(
                        tf.subtract(expanded_vectors, expanded_centroids)
                    )
                , 2)


    return tf.argmin(distances, 0)

Фактическая проблема заключается в том, что я пытаюсь выяснить, какой кластер остался пустым:

    def missing():
        given, b = tf.unique(min)
        clusters=tf.constant(list(range(centroids.shape[0])),tf.int64)
        return tf.setdiff1d(clusters, given).out

Проблема здесь в том, что вывод не является дажепростой тензор, так что я не знаю длину списка .... (Я не могу получить форму ... Я просто получаю как форму (?,).

Когда я пытаюсь теперь заменитьзначения из вывода missing() в некоторых произвольных местах в списке вывода assign_to_nearest(samples, centroids), у меня есть еще больше проблем, так как TensorFlow не рассматривается для таких вопросов (по крайней мере, это мой вывод). Есть ли эффективные ичистый способ сделать это замены ??

Большое спасибо заранее!

...