예제 #1
0
파일: train.py 프로젝트: nel215/chainer-iaf
def main():
    # data
    train, test = get_mnist(withlabel=False)
    n_x = train.shape[1]

    # model
    model = create_sample_model(n_x)

    n_batch = 256
    train_iter = SerialIterator(train, n_batch)
    # TODO: report test loss
    # test_iter = SerialIterator(test, n_batch)

    optimizer = Adam()
    optimizer.setup(model)
    gpu = 0
    updater = StandardUpdater(train_iter, optimizer, device=gpu)

    n_epoch = 50
    trainer = Trainer(updater, (n_epoch, 'epoch'))
    trainer.extend(
        snapshot_object(
            model, filename='snapshot_epoch_{.updater.epoch:03d}.npz'),
        trigger=(1, 'epoch'))
    trainer.extend(LogReport())
    trainer.extend(PrintReport([
        'epoch', 'main/loss', 'main/iaf_loss', 'main/rec_loss',
    ]))

    trainer.run()
예제 #2
0
def main():
	parser = argparse.ArgumentParser(
	formatter_class=argparse.ArgumentDefaultsHelpFormatter)
	parser.add_argument('--device', type=int, default=0, help='gpu id')
	parser.add_argument('--modelfile', help='pretrained model file of FCN8', required=True)
	parser.add_argument('--lr', type=float, default=5e-5, help='init learning rate')
	parser.add_argument('--name', type=str, default='FCN8_SEG', help='name of the experiment')
	parser.add_argument('--resume', type=bool, default=False, help='resume training or not')
	parser.add_argument('--snapshot', type=str, help='snapshot file to resume from')
	parser.add_argument('--lambda1', default=1, type=float, help='lambda1 param')
	parser.add_argument('--lambda2', default=1, type=float, help='lambda2 param')
	parser.add_argument('--lambda3', default=1.5, type=float, help='lambda3 param')
	#total_loss = self.lambd1 * cl_loss + self.lambd2 * am_loss + self.lambd3*segment_loss

	args = parser.parse_args()


	resume = args.resume
	device = args.device

	if resume:
		load_snapshot_path = args.snapshot
		load_model_path = args.modelfile
		print("Resuming from model {}, snapshot {}".format(load_model_path, load_snapshot_path))
	else:
		pretrained_model_path = args.modelfile

	experiment = args.name
	lr = args.lr
	optim = Adam
	training_interval = (20000, 'iteration')
	snapshot_interval = (1000, 'iteration')
	lambd1 = args.lambda1
	lambd2 = args.lambda2
	lambd3 = args.lambda3
	updtr = VOC_SEG_Updater_v2

	os.makedirs('result/'+experiment, exist_ok=True)
	f = open('result/'+experiment+'/details.txt', "w+")
	f.write("lr - "+str(lr)+"\n")
	f.write("optimizer - "+str(optim)+"\n")
	f.write("lambd1 - "+str(lambd1)+"\n")
	f.write("lambd2 - "+str(lambd2)+"\n")
	f.write("lambd3 - "+str(lambd3)+"\n")
	f.write("training_interval - "+str(training_interval)+"\n")
	f.write("Updater - "+str(updtr)+"\n")
	f.close()

	if resume:
		model = FCN8s_hand()
		chainer.serializers.load_npz(load_model_path, model)
	else:
		model = FCN8s_hand()
		chainer.serializers.load_npz(pretrained_model_path, model)


	if device >= 0:
		model.to_gpu(device)
	dataset = MyTrainingDataset()
	iterator = SerialIterator(dataset, 1, shuffle=False)

	optimizer = Adam(alpha=lr)
	optimizer.setup(model)

	updater = updtr(iterator, optimizer, device=device, lambd1=lambd1, lambd2=lambd2)
	trainer = Trainer(updater, training_interval)
	log_keys = ['epoch', 'iteration', 'main/SG_Loss', 'main/TotalLoss']
	trainer.extend(extensions.LogReport(log_keys, (10, 'iteration'), log_name='log'+experiment))
	trainer.extend(extensions.PrintReport(log_keys), trigger=(100, 'iteration'))
	trainer.extend(extensions.ProgressBar(training_length=training_interval, update_interval=100))
	
	trainer.extend(extensions.snapshot(filename=experiment+'_snapshot_{.updater.iteration}'), trigger=snapshot_interval)
	trainer.extend(extensions.snapshot_object(trainer.updater._optimizers['main'].target, 
		experiment+'_model_{.updater.iteration}'), trigger=snapshot_interval)

	trainer.extend(
		extensions.PlotReport(['main/SG_Loss'], 'iteration', (20, 'iteration'), file_name=experiment + '/sg_loss.png',grid=True, marker=" "))
	trainer.extend(extensions.PlotReport(['main/TotalLoss'], 'iteration',(20, 'iteration'), file_name=experiment+'/total_loss.png', grid=True, marker=" "))
	trainer.extend(extensions.PlotReport(log_keys[2:], 'iteration',(20, 'iteration'), file_name=experiment+'/all_loss.png', grid=True, marker=" "))

	if resume:
		chainer.serializers.load_npz(load_snapshot_path, trainer)
	print("Running - - ", experiment)
	print('initial lr ',lr)
	print('optimizer ', optim)
	print('lambd1 ', lambd1)
	print('lambd2 ', lambd2)
	print('lambd3', lambd3)
	trainer.run()
예제 #3
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--out', default='result')
    parser.add_argument('--n-epoch', type=int, default=30)
    parser.add_argument('--gamma', type=float, default=1e-2)
    parser.add_argument('--device', type=int, default=-1)
    args = parser.parse_args()

    dset = create_dataset(figpath=Path(args.out) / 'train.png')
    iterator = SerialIterator(dset, batch_size=512, shuffle=True, repeat=True)
    model = Model()
    opt = Adam(alpha=args.gamma).setup(model)

    initializer = UniformInitializer((512, 2))
    sampler = LangevinSampler(initializer)
    updater = MCMCMLLUpdater(sampler, iterator, opt, device=args.device)
    trainer = Trainer(updater, (args.n_epoch, 'epoch'))
    trainer.extend(plot_sample(sampler))
    trainer.extend(extensions.LogReport())
    trainer.extend(extensions.observe_lr())
    trainer.extend(
        extensions.PrintReport(
            ['epoch', 'main/loss', 'main/logq', 'main/logp']))
    trainer.run()
def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--device', type=int, default=-1, help='gpu id')
    parser.add_argument('--lr_init',
                        type=float,
                        default=1 * 1e-7,
                        help='init learning rate')
    # parser.add_argument('--lr_trigger', type=float, default=5, help='trigger to decreace learning rate')
    # parser.add_argument('--lr_target', type=float, default=5*1e-5, help='target learning rate')
    # parser.add_argument('--lr_factor', type=float, default=.75, help='decay factor')
    parser.add_argument('--name',
                        type=str,
                        default='classifier_gain_dropout',
                        help='name of the experiment')
    parser.add_argument(
        '--modelfile',
        type=str,
        help='name of the model to resume from or if starting anew, the '
        'pretrained FCN8s_Hand model with empty final layers',
        required=True)
    parser.add_argument('--resume',
                        type=bool,
                        default=False,
                        help='resume training or not')
    parser.add_argument('--snapshot',
                        type=str,
                        default=None,
                        help='snapshot file of the trainer to resume from')

    args = parser.parse_args()

    if args.resume:
        assert args.snapshot is not None

    resume = args.resume
    device = args.device
    #os.environ["CUDA_VISIBLE_DEVICES"]=str(device)
    if resume:
        load_snapshot_path = args.snapshot

    experiment = args.name
    lr_init = args.lr_init
    # lr_target = args.lr_target
    # lr_factor = args.lr_factor
    # lr_trigger_interval = (args.lr_trigger, 'epoch')

    os.makedirs('result/' + experiment, exist_ok=True)
    f = open('result/' + experiment + '/details.txt', "w+")
    f.write("lr - " + str(lr_init) + "\n")
    f.write("optimizer - " + str(Adam))
    # f.write("lr_trigger_interval - "+str(lr_trigger_interval)+"\n")
    f.close()

    # if resume:
    model_own = FCN8s_hand()
    chainer.serializers.load_npz(args.modelfile, model_own)

    if device >= 0:
        print('sending model to gpu ' + str(device))
        model_own.to_gpu(device)

    dataset = MyTrainingDataset()
    iterator = SerialIterator(dataset, 1)
    optimizer = Adam(alpha=lr_init)
    optimizer.setup(model_own)

    updater = VOC_ClassificationUpdater_v2(iterator,
                                           optimizer,
                                           device=device,
                                           dropout=0.5)
    trainer = Trainer(updater, (100, 'epoch'))
    log_keys = ['epoch', 'iteration', 'main/Loss']
    trainer.extend(
        extensions.LogReport(log_keys, (100, 'iteration'),
                             log_name='log_' + experiment))
    trainer.extend(extensions.PrintReport(log_keys),
                   trigger=(100, 'iteration'))
    trainer.extend(extensions.snapshot(filename=experiment +
                                       "_snapshot_{.updater.iteration}"),
                   trigger=(1, 'epoch'))
    trainer.extend(extensions.snapshot_object(
        trainer.updater._optimizers['main'].target,
        experiment + "_model_{.updater.iteration}"),
                   trigger=(1, 'epoch'))
    trainer.extend(
        extensions.PlotReport(['main/Loss'],
                              'iteration', (100, 'iteration'),
                              file_name=experiment + '/loss.png',
                              grid=True,
                              marker=" "))

    # trainer.extend(extensions.ExponentialShift('lr', lr_factor, target=lr_target), trigger=lr_trigger_interval)
    if resume:
        chainer.serializers.load_npz(load_snapshot_path, trainer)

    print("Running - - ", experiment)
    print('initial lr ', lr_init)
    # print('lr_trigger_interval ', lr_trigger_interval)
    trainer.run()
예제 #5
0
def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--gpu', type=int, default=0, help='gpu id')
    parser.add_argument('--modelfile', help='pretrained model file of FCN8')
    parser.add_argument('--lr',
                        type=float,
                        default=5 * 1e-4,
                        help='init learning rate')
    parser.add_argument('--name',
                        type=str,
                        default='exp',
                        help='init learning rate')
    parser.add_argument('--resume',
                        type=int,
                        default=0,
                        help='resume training or not')
    parser.add_argument('--snapshot',
                        type=str,
                        help='snapshot file to resume from')

    args = parser.parse_args()

    resume = args.resume
    device = args.gpu

    if resume:
        load_snapshot_path = args.snapshot
        load_model_path = args.modelfile
    else:
        load_model_path = args.modelfile

    experiment = args.name
    lr = args.lr
    lr_trigger_interval = (5, 'epoch')
    optim = Adam

    os.makedirs('result/' + experiment, exist_ok=True)
    f = open('result/' + experiment + '/details.txt', "w+")
    f.write("lr - " + str(lr) + "\n")
    f.write("optimizer - " + str(optim))
    f.write("lr_trigger_interval - " + str(lr_trigger_interval) + "\n")
    f.close()

    if not resume:
        # Add the FC layers to original FConvN for GAIN
        model_own = FCN8s()
        model_original = fcn.models.FCN8s()
        model_file = fcn.models.FCN8s.download()
        chainer.serializers.load_npz(model_file, model_original)

        for layers in model_original._children:
            setattr(model_own, layers, getattr(model_original, layers))
        del (model_original, model_file)

    else:
        model_own = FCN8s()
        chainer.serializers.load_npz(load_model_path, model_own)

    if device >= 0:
        model_own.to_gpu(device)

    dataset = VOCSemanticSegmentationDataset()
    iterator = SerialIterator(dataset, 1)
    optimizer = Adam(alpha=lr)
    optimizer.setup(model_own)

    updater = VOC_ClassificationUpdater(iterator, optimizer, device=device)
    trainer = Trainer(updater, (50, 'epoch'))
    log_keys = ['epoch', 'iteration', 'main/Loss']
    trainer.extend(
        extensions.LogReport(log_keys, (100, 'iteration'),
                             log_name='log' + experiment))
    trainer.extend(extensions.PrintReport(log_keys),
                   trigger=(100, 'iteration'))
    trainer.extend(
        extensions.ProgressBar(training_length=(50, 'epoch'),
                               update_interval=500))
    trainer.extend(extensions.snapshot(filename='snapshot' + experiment),
                   trigger=(5, 'epoch'))
    trainer.extend(extensions.snapshot_object(
        trainer.updater._optimizers['main'].target, "model" + experiment),
                   trigger=(5, 'epoch'))
    trainer.extend(
        extensions.PlotReport(['main/Loss'],
                              'iteration', (100, 'iteration'),
                              file_name=experiment + '/loss.png',
                              grid=True,
                              marker=" "))

    if resume:
        chainer.serializers.load_npz(load_snapshot_path, trainer)
    print("Running - - ", experiment)
    print('initial lr ', lr)
    print('lr_trigger_interval ', lr_trigger_interval)
    trainer.run()
예제 #6
0
def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--device', type=int, default=-1, help='gpu id')
    parser.add_argument('--lr_init',
                        type=float,
                        default=5 * 1e-5,
                        help='init learning rate')
    # parser.add_argument('--lr_trigger', type=float, default=5, help='trigger to decreace learning rate')
    # parser.add_argument('--lr_target', type=float, default=5*1e-5, help='target learning rate')
    # parser.add_argument('--lr_factor', type=float, default=.75, help='decay factor')
    parser.add_argument('--name',
                        type=str,
                        default='classifier',
                        help='name of the experiment')
    parser.add_argument('--resume',
                        type=bool,
                        default=False,
                        help='resume training or not')
    parser.add_argument('--snapshot',
                        type=str,
                        help='snapshot file of the trainer to resume from')

    args = parser.parse_args()

    resume = args.resume
    device = args.device

    if resume:
        load_snapshot_path = args.snapshot

    experiment = args.name
    lr_init = args.lr_init
    # lr_target = args.lr_target
    # lr_factor = args.lr_factor
    # lr_trigger_interval = (args.lr_trigger, 'epoch')

    os.makedirs('result/' + experiment, exist_ok=True)
    f = open('result/' + experiment + '/details.txt', "w+")
    f.write("lr - " + str(lr_init) + "\n")
    f.write("optimizer - " + str(Adam))
    # f.write("lr_trigger_interval - "+str(lr_trigger_interval)+"\n")
    f.close()

    if not resume:
        # Add the FC layers to original FCN for GAIN
        model_own = FCN8s()
        model_original = fcn.models.FCN8s()
        model_file = fcn.models.FCN8s.download()
        chainer.serializers.load_npz(model_file, model_original)

        for layers in model_original._children:
            setattr(model_own, layers, getattr(model_original, layers))
        del (model_original, model_file)

    else:
        model_own = FCN8s()

    if device >= 0:
        model_own.to_gpu(device)

    dataset = VOCSemanticSegmentationDataset()
    iterator = SerialIterator(dataset, 1)
    optimizer = Adam(alpha=lr_init)
    optimizer.setup(model_own)

    updater = VOC_ClassificationUpdater(iterator, optimizer, device=device)
    trainer = Trainer(updater, (100, 'epoch'))
    log_keys = ['epoch', 'iteration', 'main/Loss']
    trainer.extend(
        extensions.LogReport(log_keys, (100, 'iteration'),
                             log_name='log_' + experiment))
    trainer.extend(extensions.PrintReport(log_keys),
                   trigger=(100, 'iteration'))
    trainer.extend(extensions.snapshot(filename=experiment +
                                       "_snapshot_{.updater.iteration}"),
                   trigger=(5, 'epoch'))
    trainer.extend(extensions.snapshot_object(
        trainer.updater._optimizers['main'].target,
        experiment + "_model_{.updater.iteration}"),
                   trigger=(5, 'epoch'))
    trainer.extend(
        extensions.PlotReport(['main/Loss'],
                              'iteration', (100, 'iteration'),
                              file_name='trainer_' + experiment + '/loss.png',
                              grid=True,
                              marker=" "))

    # trainer.extend(extensions.ExponentialShift('lr', lr_factor, target=lr_target), trigger=lr_trigger_interval)
    if resume:
        chainer.serializers.load_npz(load_snapshot_path, trainer)

    print("Running - - ", experiment)
    print('initial lr ', lr_init)
    # print('lr_trigger_interval ', lr_trigger_interval)
    trainer.run()