Hello.
I am trying to implement a k-means algorithm for a CNN that first of all calculate the centroids of the k-means.
I have a tensor of dims [80,1000] with the features of one layer of the CNN.
Then i randomly create a tensor of the same dims.
I calculate the euclidean dist. and take the minimum of this tensor.  Then, i assign the new centroids corresponding to the index of the tensor with the features.
My problem is that i want to loop this until the centroids dont change their position but i am not very sure how i could achieve so and how to go updating the values received for the centroids.
the code is the following:
def k_means_torch(dictionary, model):
    centroids = torch.randn(len(dictionary), 1000).cuda()
    dist_centroids = torch.cdist(dictionary,centroids, p=2.0)
    (values, indices) = torch.min(dist_centroids, dim=1)
    centroids_new = dictionary[indices]
    while 1:
      dist_centroids_loop = torch.cdist(dictionary,centroids_new, p=2.0)
      (values_, indices_) = torch.min(dist_centroids_loop, dim=1)

      if (torch.equal(centroids_new, dictionary[indices_])):
        break
      else:
        centroids_new = ((centroids_new + dictionary[indices_])/2)

Any ideas are more than welcome