# training settings
 lr = tf.get_variable(
     'lr', shape=[], trainable=False,
     initializer=tf.constant_initializer(1e-4))
 d_optimizer = tf.train.AdamOptimizer(lr, beta1=0.5, beta2=0.9)
 g_optimizer = d_optimizer
 # gradient processor
 if config.GRADIENT_CLIP:
     gradient_processor = lambda grad_var: (
         tf.clip_by_average_norm(grad_var[0], config.GRADIENT_CLIP_VALUE),
         grad_var[1])
 else:
     gradient_processor = None
 # log dir
 log_prefix = 'model_logs/' + '_'.join([
     ng.date_uid(), socket.gethostname(), config.DATASET,
     'MASKED' if config.GAN_WITH_MASK else 'NORMAL',
     config.GAN,config.LOG_DIR])
 # train discriminator with secondary trainer, should initialize before
 # primary trainer.
 discriminator_training_callback = ng.callbacks.SecondaryTrainer(
     pstep=1,
     optimizer=d_optimizer,
     var_list=d_vars,
     max_iters=5,
     graph_def=multigpu_graph_def,
     graph_def_kwargs={
         'model': model, 'data': data, 'config': config, 'loss_type': 'd', 'mask_index': mask_index, 'exclusionmask_index': exclusionmask_index},
 )
 # train generator with primary trainer
 trainer = ng.train.Trainer(
Example #2
0
                         shape=[],
                         trainable=False,
                         initializer=tf.constant_initializer(1e-4))
    d_optimizer = tf.train.AdamOptimizer(lr, beta1=0.5, beta2=0.9)
    g_optimizer = d_optimizer

    # gradient processor
    if config.GRADIENT_CLIP:
        gradient_processor = lambda grad_var: (tf.clip_by_average_norm(
            grad_var[0], config.GRADIENT_CLIP_VALUE), grad_var[1])
    else:
        gradient_processor = None

    # log dir
    log_prefix = 'model_logs/' + '_'.join([
        ng.date_uid(),
        socket.gethostname(), config.DATASET, 'MASKED'
        if config.GAN_WITH_MASK else 'NORMAL', config.GAN, config.LOG_DIR
    ])

    # train discriminator with secondary trainer, should initialize before primary trainer.
    discriminator_training_callback = ng.callbacks.SecondaryTrainer(
        pstep=1,
        optimizer=d_optimizer,
        var_list=d_vars,
        max_iters=5,
        graph_def=multigpu_graph_def,
        graph_def_kwargs={
            'model': model,
            'data': data,
            'config': config,
def train_gan(config):
    """main function for training progressive gan

    Args:
        config (ng.Config): all hyperparameters

    Returns:
    """
    logger.info('Start to train progressive gan.')
    # get dataset
    with open(config.DATA_FLIST[config.DATASET]) as f:
        fnames = f.read().splitlines()
    img_shapes = [config.CURRENT_RESOLUTION, config.CURRENT_RESOLUTION, 3]
    data = ng.data.DataFromFNames(fnames, img_shapes)

    # init model
    model = progressive_model.ProgressiveGAN(1024, config)
    g_vars, d_vars, losses = model.build_graph_with_losses(data,
                                                           config,
                                                           reuse=False)

    lr = tf.get_variable('lr',
                         shape=[],
                         trainable=False,
                         initializer=tf.constant_initializer(1e-4))
    g_optimizer = tf.train.AdamOptimizer(
        lr,
        beta1=0.5,
        beta2=0.9,
        # beta1=config.TRAIN['adam_beta1'],
        # beta2=config.TRAIN['adam_beta2'],
        # epsilon=config.TRAIN['adam_epsilon']
    )
    d_optimizer = g_optimizer

    discriminator_training_callback = ng.callbacks.SecondaryTrainer(
        pstep=1,
        optimizer=d_optimizer,
        var_list=d_vars,
        max_iters=5,
        # max_iters=config.TRAIN['D_training_repeats'],
        graph_def=multigpu_graph_def,
        graph_def_kwargs={
            'model': model,
            'data': data,
            'config': config,
            'loss_type': 'd'
        },
    )

    log_prefix = 'model_logs/' + '_'.join([
        str(ng.date_uid()),
        socket.gethostname(), config.DATASET, config.LOG_DIR
    ])

    trainer = ng.train.Trainer(
        config=config,
        optimizer=g_optimizer,
        var_list=g_vars,
        gpu_num=config.NUM_GPUS,
        async_train=True,
        graph_def=multigpu_graph_def,
        graph_def_kwargs={
            'model': model,
            'data': data,
            'config': config,
            'loss_type': 'g'
        },
        spe=config.TRAIN_SPE,
        max_iters=config.MAX_ITERS,
        log_dir=log_prefix,
    )

    trainer.add_callbacks([
        ng.callbacks.WeightsViewer(),
        # ng.callbacks.ModelRestorer(trainer.context['saver'], dump_prefix=config.RESTORE_PREFIX, optimistic=True),
        discriminator_training_callback,
        ng.callbacks.ModelSaver(config.TRAIN_SPE, trainer.context['saver'],
                                log_prefix + '/snap'),
        ng.callbacks.SummaryWriter((config.VAL_PSTEPS // 1),
                                   trainer.context['summary_writer'],
                                   tf.summary.merge_all()),
    ])

    trainer.train()