class_docstr: This wrapper augments a layer so the weight tensor(s) can be clustered.
  
  This wrapper implements nearest neighbor clustering algorithm. This algorithm
  ensures that only a specified number of unique values are used in a weight
  tensor. This allows for certain types of hardware to benefit from advanced
  weight compression techniques and the associated reduction in model memory
  footprint and bandwidth.
  
  From practical standpoint this is implemented using a lookup table to hold the
  cluster centroid values during model training. The weight array is populated
  with 'gather' operation so that during back propagation the gradients can be
  calculated in a normal way. The lookup table is then adjusted using the
  cumulative gradient values for the weights that correspond to the same
  centroid.
  
  The number of unique values required as well as the way cluster centroids
  are initialized are passed in the wrapper's constructor.
  
  The initial values of cluster centroids are fine-tuned during the training.
code: def losses(self):
      return self.layer.losses + self._losses
  
imports: import operator
  import tensorflow
  from tensorflow_model_optimization.python.core.clustering.keras import cluster_config
  from tensorflow_model_optimization.python.core.clustering.keras import clusterable_layer
  from tensorflow_model_optimization.python.core.clustering.keras import clustering_centroids
  from tensorflow_model_optimization.python.core.clustering.keras import clustering_registry
label_desc: Use image node_id 18 for calling the ClusterWeights obj's underlying member method code with example usage: obj.losses() and returns: unknown