from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport _init_pathsimport osimport torchimport torch.utils.datafrom opts import optsfrom models.model import create_model, load_model, save_modelfrom models.data_parallel import DataParallelfrom logger import Loggerfrom datasets.dataset_factory import get_datasetfrom trains.train_factory import train_factorydef main(opt):torch.manual_seed(opt.seed)torch.backends.cudnn.benchmark = not opt.not_cuda_benchmark and not opt.testDataset = get_dataset(opt.dataset, opt.task)opt = opts().update_dataset_info_and_set_heads(opt, Dataset)print(opt)logger = Logger(opt)os.environ['CUDA_VISIBLE_DEVICES'] = opt.gpus_stropt.device = torch.device('cuda' if opt.gpus[0] >= 0 else 'cpu')print('Creating model...')model = create_model(opt.arch, opt.heads, opt.head_conv)optimizer = torch.optim.Adam(model.parameters(), opt.lr)start_epoch = 0if opt.load_model != '':model, optimizer, start_epoch = load_model(model, opt.load_model, optimizer, opt.resume, opt.lr, opt.lr_step)Trainer = train_factory[opt.task]trainer = Trainer(opt, model, optimizer)trainer.set_device(opt.gpus, opt.chunk_sizes, opt.device)print('Setting up data...')val_loader = torch.utils.data.DataLoader(Dataset(opt, 'val'),batch_size=1,shuffle=False,num_workers=1,pin_memory=True)if opt.test:_, preds = trainer.val(0, val_loader)val_loader.dataset.run_eval(preds, opt.save_dir)returntrain_loader = torch.utils.data.DataLoader(Dataset(opt, 'train'),batch_size=opt.batch_size,shuffle=True,num_workers=opt.num_workers,pin_memory=True,drop_last=True)print('Starting training...')best = 1e10for epoch in range(start_epoch + 1, opt.num_epochs + 1):mark = epoch if opt.save_all else 'last'log_dict_train, _ = trainer.train(epoch, train_loader)logger.write('epoch: {} |'.format(epoch))for k, v in log_dict_train.items():logger.scalar_summary('train_{}'.format(k), v, epoch)logger.write('{} {:8f} | '.format(k, v))if opt.val_intervals > 0 and epoch % opt.val_intervals == 0:save_model(os.path.join(opt.save_dir, 'model_{}.pth'.format(mark)),epoch, model, optimizer)with torch.no_grad():log_dict_val, preds = trainer.val(epoch, val_loader)for k, v in log_dict_val.items():logger.scalar_summary('val_{}'.format(k), v, epoch)logger.write('{} {:8f} | '.format(k, v))if log_dict_val[opt.metric] < best:best = log_dict_val[opt.metric]save_model(os.path.join(opt.save_dir, 'model_best.pth'),epoch, model)else:save_model(os.path.join(opt.save_dir, 'model_last.pth'),epoch, model, optimizer)logger.write('\n')if epoch in opt.lr_step:save_model(os.path.join(opt.save_dir, 'model_{}.pth'.format(epoch)),epoch, model, optimizer)lr = opt.lr * (0.1 ** (opt.lr_step.index(epoch) + 1))print('Drop LR to', lr)for param_group in optimizer.param_groups:param_group['lr'] = lrlogger.close()if __name__ == '__main__':opt = opts().parse()main(opt)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。