コード例 #1
0
def main():
    global args
    args = parser.parse_args()
    if args.cuda:
        cudnn.benchmark = True

    python_name = load_setting_aug.load_python_name(args, Path(__file__).name)
    print(python_name)
    global save_max_accu
    save_max_accu = './{}.txt'.format(python_name)
    # with open(save_max_accu, 'a') as f:
    #     f.write(python_name)
    #     f.write('\n')
    #     f.close()

    for TIMES in range(1, args.TIMES):
        nets, optimizers = load_setting_aug.define_net_and_opt(args)
        # exit()
        train_loader1, train_loader2, test_loader = load_setting_aug.load_dataset(
            args)
        max_prec = [0.0, 0.0, 0.0, 0.0, 0.0]

        for epoch in range(1, args.epochs + 1):
            epoch_start_time = time.time()
            adjust_lr(optimizers, epoch, times=TIMES)
            if using_one_train:
                train(train_loader1, nets, optimizers, epoch)
            else:
                train1(train_loader1, nets, optimizers, epoch)
                print(
                    '--------------------------------------------------------------------------'
                )
                train2(train_loader2, nets, optimizers, epoch)
            epoch_time = time.time() - epoch_start_time
            print('one epoch time is {:02}h{:02}m{:02}s'.format(
                *transform_time(epoch_time)))

            print('testing the models......')
            pred_list = test12(test_loader, nets, epoch)
            for id in range(len(pred_list)):
                if max_prec[id] < pred_list[id]:
                    max_prec[id] = pred_list[id]
            current_max = 'Net:{} || Current-Max:[{:.2f}, {:.2f}, {:.2f}, {:.2f}, {:.2f}]'.format(
                python_name, max_prec[0], max_prec[1], max_prec[2],
                max_prec[3], max_prec[4])
            print(current_max)
            if epoch == args.epochs:
                with open(save_max_accu, 'a') as f:
                    f.write(str(current_max))
                    f.write('\n')
                    f.close()
コード例 #2
0
def main():
	global args
	args = parser.parse_args()
	print(args)

	if not os.path.exists(os.path.join(args.save_root,'checkpoint')):
		os.makedirs(os.path.join(args.save_root,'checkpoint'))

	if args.cuda:
		cudnn.benchmark = True

	print('----------- Network Initialization --------------')
	snet = define_tsnet(name=args.s_name, num_class=args.num_class, cuda=args.cuda)
	checkpoint = torch.load(args.s_init)
	load_pretrained_model(snet, checkpoint['net'])

	tnet = define_tsnet(name=args.t_name, num_class=args.num_class, cuda=args.cuda)
	checkpoint = torch.load(args.t_model)
	load_pretrained_model(tnet, checkpoint['net'])
	tnet.eval()
	for param in tnet.parameters():
		param.requires_grad = False
	print('-----------------------------------------------')

	# initialize optimizer
	optimizer = torch.optim.SGD(snet.parameters(),
								lr = args.lr, 
								momentum = args.momentum, 
								weight_decay = args.weight_decay,
								nesterov = True)

	# define loss functions
	if args.cuda:
		criterionCls    = torch.nn.CrossEntropyLoss().cuda()
		criterionFitnet = torch.nn.MSELoss().cuda()
	else:
		criterionCls    = torch.nn.CrossEntropyLoss()
		criterionFitnet = torch.nn.MSELoss()

	# define transforms
	if args.data_name == 'cifar10':
		dataset = dst.CIFAR10
		mean = (0.4914, 0.4822, 0.4465)
		std  = (0.2470, 0.2435, 0.2616)
	elif args.data_name == 'cifar100':
		dataset = dst.CIFAR100
		mean = (0.5071, 0.4865, 0.4409)
		std  = (0.2673, 0.2564, 0.2762)
	else:
		raise Exception('invalid dataset name...')

	train_transform = transforms.Compose([
			transforms.Pad(4, padding_mode='reflect'),
			transforms.RandomCrop(32),
			transforms.RandomHorizontalFlip(),
			transforms.ToTensor(),
			transforms.Normalize(mean=mean,std=std)
		])
	test_transform = transforms.Compose([
			transforms.CenterCrop(32),
			transforms.ToTensor(),
			transforms.Normalize(mean=mean,std=std)
		])

	# define data loader
	train_loader = torch.utils.data.DataLoader(
			dataset(root      = args.img_root,
					transform = train_transform,
					train     = True,
					download  = True),
			batch_size=args.batch_size, shuffle=True, num_workers=4, pin_memory=True)
	test_loader = torch.utils.data.DataLoader(
			dataset(root      = args.img_root,
					transform = test_transform,
					train     = False,
					download  = True),
			batch_size=args.batch_size, shuffle=False, num_workers=4, pin_memory=True)

	for epoch in range(1, args.epochs+1):
		epoch_start_time = time.time()

		adjust_lr(optimizer, epoch)

		# train one epoch
		nets = {'snet':snet, 'tnet':tnet}
		criterions = {'criterionCls':criterionCls, 'criterionFitnet':criterionFitnet}
		train(train_loader, nets, optimizer, criterions, epoch)
		epoch_time = time.time() - epoch_start_time
		print('one epoch time is {:02}h{:02}m{:02}s'.format(*transform_time(epoch_time)))

		# evaluate on testing set
		print('testing the models......')
		test_start_time = time.time()
		test(test_loader, nets, criterions)
		test_time = time.time() - test_start_time
		print('testing time is {:02}h{:02}m{:02}s'.format(*transform_time(test_time)))

		# save model
		print('saving models......')
		save_name = 'fitnet_r{}_r{}_{:>03}.ckp'.format(args.t_name[6:], args.s_name[6:], epoch)
		save_name = os.path.join(args.save_root, 'checkpoint', save_name)
		if epoch == 1:
			save_checkpoint({
				'epoch': epoch,
				'snet': snet.state_dict(),
				'tnet': tnet.state_dict(),
			}, save_name)
		else:
			save_checkpoint({
				'epoch': epoch,
				'snet': snet.state_dict(),
			}, save_name)
コード例 #3
0
def main():
	global args
	args = parser.parse_args()
	print(args)

	if not os.path.exists(os.path.join(args.save_root,'checkpoint')):
		os.makedirs(os.path.join(args.save_root,'checkpoint'))

	if args.cuda:
		cudnn.benchmark = True

	print('----------- Network Initialization --------------')
	net = define_tsnet(name=args.net_name, num_class=args.num_class, cuda=args.cuda)
	print('-----------------------------------------------')

	# save initial parameters
	print('saving initial parameters......')

	if args.net_name[:6] == 'resnet':
		save_name = 'baseline_r{}_{:>03}.ckp'.format(args.net_name[6:], 0)
	elif args.net_name[:6] == 'resnex':
		save_name = 'baseline_rx{}_{:>03}.ckp'.format(args.net_name[7:], 0)
	elif args.net_name[:6] == 'densen':
		save_name = 'baseline_dBC{}_{:>03}.ckp'.format(args.net_name[10:], 0)

	save_name = os.path.join(args.save_root, 'checkpoint', save_name)
	save_checkpoint({
		'epoch': 0,
		'net': net.state_dict(),
	}, save_name)

	# initialize optimizer
	optimizer = torch.optim.SGD(net.parameters(),
								lr = args.lr,
								momentum = args.momentum,
								weight_decay = args.weight_decay,
								nesterov = True)

	# define loss functions
	if args.cuda:
		criterion = torch.nn.CrossEntropyLoss().cuda()
	else:
		criterion = torch.nn.CrossEntropyLoss()

	# define transforms
	if args.data_name == 'cifar10':
		dataset = dst.CIFAR10
		mean = (0.4914, 0.4822, 0.4465)
		std  = (0.2470, 0.2435, 0.2616)
	elif args.data_name == 'cifar100':
		dataset = dst.CIFAR100
		mean = (0.5071, 0.4865, 0.4409)
		std  = (0.2673, 0.2564, 0.2762)
	else:
		raise Exception('invalid dataset name...')

	train_transform = transforms.Compose([
			transforms.Pad(4, padding_mode='reflect'),
			transforms.RandomCrop(32),
			transforms.RandomHorizontalFlip(),
			transforms.ToTensor(),
			transforms.Normalize(mean=mean,std=std)
		])
	test_transform = transforms.Compose([
			transforms.CenterCrop(32),
			transforms.ToTensor(),
			transforms.Normalize(mean=mean,std=std)
		])

	# define data loader
	train_loader = torch.utils.data.DataLoader(
			dataset(root      = args.img_root,
					transform = train_transform,
					train     = True,
					download  = True),
			batch_size=args.batch_size, shuffle=True, num_workers=4, pin_memory=True)
	test_loader = torch.utils.data.DataLoader(
			dataset(root      = args.img_root,
					transform = test_transform,
					train     = False,
					download  = True),
			batch_size=args.batch_size, shuffle=False, num_workers=4, pin_memory=True)

	trainF = open(os.path.join(args.save_log, 'train.csv'), 'w')
	testF = open(os.path.join(args.save_log, 'test.csv'), 'w')

	train_start_time = time.time()

	max_test_prec_1, max_test_prec_5 = 0, 0

	for epoch in range(1, args.epochs+1):
		epoch_start_time = time.time()

		adjust_lr(optimizer, epoch)

		# train one epoch
		train(train_loader, net, optimizer, criterion, epoch, trainF)
		epoch_time = time.time() - epoch_start_time
		print('one epoch time is {:02}h{:02}m{:02}s'.format(*transform_time(epoch_time)))

		# evaluate on testing set
		print('testing the models......')
		test_start_time = time.time()
		test_prec_1, test_prec_5 = test(test_loader, net, criterion, testF)
		test_time = time.time() - test_start_time
		print('testing time is {:02}h{:02}m{:02}s'.format(*transform_time(test_time)))

		max_test_prec_1 = max(max_test_prec_1, test_prec_1)
		max_test_prec_5 = max(max_test_prec_5, test_prec_5)

		# save model
		print('saving models......')
		save_name = 'baseline_r{}_{:>03}.ckp'.format(args.net_name[6:], epoch)
		save_name = os.path.join(args.save_root, 'checkpoint', save_name)
		save_checkpoint({
			'epoch': epoch,
			'net': net.state_dict(),
		}, save_name)

	train_finish_time = time.time()
	train_total_time = train_start_time - train_finish_time

	trainF.close()
	testF.close()

	print('the total train time is:{:02}h{:02}m{:02}s'.format(*transform_time(train_total_time)))
	print('the max test prec@1:{:.2f} , prec@5:{:.2f}'.format(max_test_prec_1, max_test_prec_5))