def train_model(self):
     t0 = time.time()
     print(self.model.summary())
     dataset = Datasets(self.options)
     train_gen = dataset.make_split_generator('train')
     validation_gen = dataset.make_split_generator('validation')
     optimizer = Adam(lr=self.options.init_lr, decay=0)
     self.model.compile(
         optimizer, loss=self.loss_function, metrics=self.metrics)
         
     callbacks = self.make_callbacks()
     self.model.fit_generator(
         train_gen,
         initial_epoch=self.options.init_epoch,
         steps_per_epoch=self.options.steps_per_epoch,
         epochs=self.options.epochs,
         validation_data=validation_gen,
         validation_steps=self.options.validation_steps,
         callbacks=callbacks)
         
     print('Training time cost: %0.2f(min).'%((time.time()-t0)/60))