Esempio n. 1
0
def build(config, main_prog, startup_prog, is_train=True, is_distributed=True):
    """
    Build a program using a model and an optimizer
        1. create feeds
        2. create a dataloader
        3. create a model
        4. create fetchs
        5. create an optimizer

    Args:
        config(dict): config
        main_prog(): main program
        startup_prog(): startup program
        is_train(bool): train or valid
        is_distributed(bool): whether to use distributed training method

    Returns:
        dataloader(): a bridge between the model and the data
        fetchs(dict): dict of model outputs(included loss and measures)
    """
    with paddle.static.program_guard(main_prog, startup_prog):
        with paddle.utils.unique_name.guard():
            use_mix = config.get('use_mix') and is_train
            use_dali = config.get('use_dali', False)
            use_distillation = config.get('use_distillation')

            image_dtype = "float32"
            if config["ARCHITECTURE"]["name"] == "ResNet50" and config.get("use_pure_fp16", False) \
                and config.get("use_dali", False):
                image_dtype = "float16"
            feeds = create_feeds(config.image_shape,
                                 use_mix=use_mix,
                                 use_dali=use_dali,
                                 dtype=image_dtype)
            if use_dali and use_mix:
                import dali
                feeds = dali.mix(feeds, config, is_train)
            out = create_model(config.ARCHITECTURE, feeds['image'],
                               config.classes_num, config, is_train)
            fetchs = create_fetchs(out,
                                   feeds,
                                   config.ARCHITECTURE,
                                   config.topk,
                                   config.classes_num,
                                   epsilon=config.get('ls_epsilon'),
                                   use_mix=use_mix,
                                   config=config,
                                   use_distillation=use_distillation)
            lr_scheduler = None
            if is_train:
                optimizer, lr_scheduler = create_optimizer(config)
                optimizer = mixed_precision_optimizer(config, optimizer)
                if is_distributed:
                    optimizer = dist_optimizer(config, optimizer)
                optimizer.minimize(fetchs['loss'][0])
    return fetchs, lr_scheduler, feeds
Esempio n. 2
0
def build(config, main_prog, startup_prog, is_train=True, is_distributed=True):
    """
    Build a program using a model and an optimizer
        1. create feeds
        2. create a dataloader
        3. create a model
        4. create fetchs
        5. create an optimizer

    Args:
        config(dict): config
        main_prog(): main program
        startup_prog(): startup program
        is_train(bool): train or valid
        is_distributed(bool): whether to use distributed training method

    Returns:
        dataloader(): a bridge between the model and the data
        fetchs(dict): dict of model outputs(included loss and measures)
    """
    with fluid.program_guard(main_prog, startup_prog):
        with fluid.unique_name.guard():
            use_mix = config.get('use_mix') and is_train
            use_dali = config.get('use_dali')
            use_distillation = config.get('use_distillation')
            feeds = create_feeds(config.image_shape, use_mix, use_dali)

            if use_dali and use_mix:
                import dali
                feeds = dali.mix(feeds, config, is_train)

            dataloader = create_dataloader(
                feeds.values()) if not config.get('use_dali') else None
            out = create_model(config.ARCHITECTURE, feeds['image'],
                               config.classes_num, is_train)
            fetchs = create_fetchs(out,
                                   feeds,
                                   config.ARCHITECTURE,
                                   config.topk,
                                   config.classes_num,
                                   epsilon=config.get('ls_epsilon'),
                                   use_mix=use_mix,
                                   use_distillation=use_distillation)
            if is_train:
                optimizer = create_optimizer(config)
                lr = optimizer._global_learning_rate()
                fetchs['lr'] = (lr, AverageMeter('lr', 'f', need_avg=False))

                optimizer = mixed_precision_optimizer(config, optimizer)
                if is_distributed:
                    optimizer = dist_optimizer(config, optimizer)
                optimizer.minimize(fetchs['loss'][0])

                if config.get('use_ema'):

                    global_steps = fluid.layers.learning_rate_scheduler._decay_step_counter(
                    )
                    ema = ExponentialMovingAverage(config.get('ema_decay'),
                                                   thres_steps=global_steps)
                    ema.update()
                    return dataloader, fetchs, ema

    return dataloader, fetchs