def METHOD_NAME(self):
    with tqdm(total=self.epochs, unit=' epoch') as tepoch:
        for epoch_num in range(self.epochs):
            # init loss and accuracy numbers
            tepoch.set_description(f"Epoch {epoch_num + 1} ")
            self.model.METHOD_NAME()
            total_loss_train = 0
            for positive_triplets, negative_triples in tqdm(self.train_dataloader):
                self.optimizer.zero_grad()
                loss = self.model(positive_triplets, negative_triples)
                loss.mean().backward()
                if self.use_cuda:
                    loss = loss.data.cuda()
                else:
                    loss = loss.data.cpu()
                self.optimizer.step()
                self.step += 1
                total_loss_train += loss.mean().item()
            tepoch.write(f"acc_loss_train: {total_loss_train}")
            tepoch.write(f"current learning rate : {self.learning_rate}")
            if epoch_num % 20 == 0:
                self.evaluate()
                self.save_model()
            self.scheduler.step()
            self.learning_rate = self.scheduler.get_lr()