def training_step(self, batch, batch_idx):
    self.prototypes.normalize()
    (multi_crops, _, _) = batch
    multi_crop_features = [self.forward(x) for x in multi_crops]
    high_resolution_features = multi_crop_features[:2]
    low_resolution_features = multi_crop_features[2:]
    loss = self.criterion(high_resolution_features, low_resolution_features)
    self.log('train_loss_ssl', loss)
    return loss
def training_step(self, batch, batch_idx):
    self.prototypes.normalize()
    (multi_crops, _, _) = batch
    multi_crop_features = [self.forward(x) for x in multi_crops]
    high_resolution_features = multi_crop_features[:2]
    low_resolution_features = multi_crop_features[2:]
    loss = self.criterion(high_resolution_features, low_resolution_features)
    self.log('train_loss_ssl', loss)
    return loss