'------------- Training epoch {} --------------'.format(i + 1)) train_accuracy = trainer.train(train_set, args.batch_size, args.debug_single_batch) if args.debug_single_batch: sys.exit(0) dev_scores = trainer.test(dev_set, args.batch_size) dev_map, dev_mrr = compute_map_mrr(args.dataset_folder, dev_set, dev_scores) logger.info("------- MAP {}, MRR {}".format(dev_map, dev_mrr)) if dev_map - best_map > 1e-3: # new map is better than best map best_model = i best_map = dev_map QAModel.save(net, args.model_outfile) logger.info('Achieved better dev_map ... saved model') if args.test_on_each_epoch: test_scores = trainer.test(test_set, args.batch_size) map, mrr = compute_map_mrr(args.dataset_folder, test_set, test_scores) logger.info("------- MAP {}, MRR {}".format(map, mrr)) if (i - best_model) >= args.patience: logger.warning('No improvement since the last {} epochs. Stopping training'\ .format(i - best_model)) break logger.info(' ------------ Training epochs completed! ------------') logger.info('Best dev MAP in training phase = {:.4f}'.format(best_map))
torch.manual_seed(1234) np.random.seed(1234) train_set, dev_set, test_set = 'train', 'clean-dev', 'clean-test' if args.train_all: train_set, dev_set, test_set = 'train-all', 'raw-dev', 'raw-test' # cache word embeddings cache_file = os.path.splitext(args.word_vectors_file)[0] + '.cache' utils.cache_word_embeddings(args.word_vectors_file, cache_file) vocab_size, vec_dim = utils.load_embedding_dimensions(cache_file) # instantiate model net = QAModel(vec_dim, args.filter_width, args.num_conv_filters, args.no_ext_feats) #filter width is 5 QAModel.save(net, args.dataset_folder, args.model_fname) torch.set_num_threads(args.num_threads) trainer = Trainer(net, args.eta, args.mom, args.no_loss_reg, vec_dim) logger.info("Loading input data...") trainer.load_input_data(args.dataset_folder, cache_file, train_set, dev_set, test_set) best_map = 0.0 best_model = 0 for i in range(args.epochs): logger.info('------------- Training epoch {} --------------'.format(i+1)) train_accuracy = trainer.train(train_set, args.batch_size, args.debugSingleBatch) if args.debugSingleBatch: sys.exit(0)