def train(self):
     # device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
     valid_evaluator = Evaluator()
     self.model = self.model.to(self.device)
     for epochIndex in range(self.epochNum):
         loss_train = self.one_pass_train(epochIndex)
         loss_overall_train, loss_emo_train = LossLogger(
             self.fo, 'train', loss_train, '--', epochIndex)
         loss_valid = valid_evaluator.evaluation(self.X_valid, self.Y_valid,
                                                 self.model)
         loss_overall_valid, loss_emo_valid = LossLogger(
             self.fo, 'valid', loss_valid, '--', epochIndex)
         self.trainValidWritter(loss_train, loss_valid, loss_overall_train,
                                loss_emo_train, loss_overall_valid,
                                loss_emo_valid, epochIndex)
         if (self.betterSaver(loss_emo_valid) == True):
             break
     self.writter.close()
     self.fo.close()