from module import Preprocessor, Trainer, Predictor if __name__ == "__main__": parser = argparse.ArgumentParser(description='Process commandline') parser.add_argument('--config', type=str, required=True) parser.add_argument('--log_level', type=str, default="INFO") args = parser.parse_args() FORMAT = '%(asctime)-15s %(message)s' logging.basicConfig(format=FORMAT, level=args.log_level) logger = logging.getLogger('global_logger') with open(args.config, 'r') as config_file: try: config = yaml.safe_load(config_file) preprocessor = Preprocessor(config['preprocessing'], logger) data_x, data_y, train_x, train_y, validate_x, validate_y, test_x = preprocessor.process( ) trainer = Trainer(config['training'], logger, preprocessor.classes) trainer.fit(train_x, train_y) # Returns value error: Classification metrics can't handle a mix of multilabel-indicator and binary target # Therefore quote out these for now to have the program work #accuracy, cls_report = trainer.validate(validate_x, validate_y) #logger.info("accuracy:{}".format(accuracy)) #logger.info("\n{}\n".format(cls_report)) model = trainer.fit(data_x, data_y) predictor = Predictor(config['predict'], logger, model) probs = predictor.predict_prob(test_x) predictor.save_result(preprocessor.test_ids, probs) except yaml.YAMLError as err: logger.warning('Config file err: {}'.format(err))
# Preparing optimizer optimizer = create_optimizer(args, model) # Preparing criterions criterions = { "class_1": create_criterions(args, num_class_1, device), "class_2": create_criterions(args, num_class_2, device), } # Preparing metrics metrics = { "class_1": create_metrics(args), "class_2": create_metrics(args) } # Preparing trainer trainer = Trainer( model=model, optim=optimizer, criterions=criterions, metric=metrics, scheduler=None, train_dl=data["train_dataloader"], val_dl=data["valid_dataloader"], writer=writer, save_dir=args.model_dir, device=device, ) trainer.fit(args.epochs)