shuffle=not args.get('sort_dataset'), num_workers=args.get('num_workers')) # test_dataset = TextDataset(test_data, dictionary, args.get('sort_dataset'), args.get('min_length'), args.get('max_length')) # test_dataloader = TextDataLoader(dataset=test_dataset, dictionary=dictionary, batch_size=args.get('batch_size'), shuffle = not args.get('sort_dataset')) logger.info("Training...") # trainable_params = [p for p in model.parameters() if p.requires_grad] if args.get('optimizer') == 'Adam': optimizer = Adam(model.parameters(), lr=args.get('initial_lr')) elif args.get('optimizer') == 'Adadelta': optimizer = Adadelta(params=trainable_params, lr=args.get('initial_lr'), weight_decay=0.95) else: raise NotImplementedError() lr_plateau = lr_scheduler.ReduceLROnPlateau(optimizer, factor=0.2, patience=5) criterion = nn.CrossEntropyLoss trainer = Trainer(model, train_dataloader, val_dataloader, criterion=criterion, optimizer=optimizer, lr_schedule=args.get('lr_schedule'), lr_scheduler=lr_plateau, use_gpu=args.get('use_gpu'), logger=logger) trainer.run(epochs=args.get('epochs')) logger.info("Evaluating...") logger.info('Best Model: {}'.format(trainer.best_checkpoint_filepath))
train_dataset = TextDataset(train_data, dictionary, args.sort_dataset, args.min_length, args.max_length) train_dataloader = TextDataLoader(dataset=train_dataset, dictionary=dictionary, batch_size=args.batch_size) val_dataset = TextDataset(val_data, dictionary, args.sort_dataset, args.min_length, args.max_length) val_dataloader = TextDataLoader(dataset=val_dataset, dictionary=dictionary, batch_size=64) test_dataset = TextDataset(test_data, dictionary, args.sort_dataset, args.min_length, args.max_length) test_dataloader = TextDataLoader(dataset=test_dataset, dictionary=dictionary, batch_size=64) logger.info("Constructing model...") model = args.model(n_classes=preprocessor.n_classes, dictionary=dictionary, args=args) if args.use_gpu: model = model.cuda() logger.info("Training...") trainable_params = [p for p in model.parameters() if p.requires_grad] if args.optimizer == 'Adam': optimizer = Adam(params=trainable_params, lr=args.initial_lr) if args.optimizer == 'Adadelta': optimizer = Adadelta(params=trainable_params, lr=args.initial_lr, weight_decay=0.95) lr_plateau = lr_scheduler.ReduceLROnPlateau(optimizer, factor=0.7, patience=5, min_lr=0.0001) criterion = nn.CrossEntropyLoss trainer = Trainer(model, train_dataloader, val_dataloader, criterion=criterion, optimizer=optimizer, lr_schedule=args.lr_schedule, lr_scheduler=lr_plateau, use_gpu=args.use_gpu, logger=logger) trainer.run(epochs=args.epochs) logger.info("Evaluating...") logger.info('Best Model: {}'.format(trainer.best_checkpoint_filepath)) model.load_state_dict(torch.load(trainer.best_checkpoint_filepath)) # load best model evaluator = Evaluator(model, test_dataloader, use_gpu=args.use_gpu, logger=logger) evaluator.evaluate()