def METHOD_NAME(self):
    image = paddle.static.data(
        name='image', shape=[None, 1, 28, 28], dtype='float32')
    label = paddle.static.data(name='label', shape=[None, 1], dtype='int64')
    model = MobileNet()
    out = model.net(input=image, class_dim=10)
    cost = paddle.nn.functional.loss.cross_entropy(input=out, label=label)
    avg_cost = paddle.mean(x=cost)
    acc_top1 = paddle.metric.accuracy(input=out, label=label, k=1)
    acc_top5 = paddle.metric.accuracy(input=out, label=label, k=5)
    optimizer = paddle.optimizer.Momentum(
        momentum=0.9,
        learning_rate=0.01,
        weight_decay=paddle.regularizer.L2Decay(4e-5))
    optimizer.minimize(avg_cost)
    main_prog = paddle.static.default_main_program()
    val_prog = main_prog.clone(for_test=True)
    place = paddle.CUDAPlace(0) if paddle.is_compiled_with_cuda(
    ) else paddle.CPUPlace()
    exe = paddle.static.Executor(place)
    exe.run(paddle.static.default_startup_program())
    def transform(x):
        return np.reshape(x, [1, 28, 28])
    train_dataset = paddle.vision.datasets.MNIST(
        mode='train', backend='cv2', transform=transform)
    test_dataset = paddle.vision.datasets.MNIST(
        mode='test', backend='cv2', transform=transform)
    train_loader = paddle.io.DataLoader(
        train_dataset,
        places=place,
        feed_list=[image, label],
        drop_last=True,
        batch_size=64,
        return_list=False)
    valid_loader = paddle.io.DataLoader(
        test_dataset,
        places=place,
        feed_list=[image, label],
        batch_size=64,
        return_list=False)
    def sample_generator_creator():
        def __reader__():
            for data in test_dataset:
                image, label = data
                image = np.expand_dims(image, axis=0)
                label = np.expand_dims(label, axis=0)
                yield image, label
        return __reader__
    def train(program):
        iter = 0
        for data in train_loader():
            cost, top1, top5 = exe.run(
                program,
                feed=data,
                fetch_list=[avg_cost, acc_top1, acc_top5])
            iter += 1
            if iter % 100 == 0:
                print(
                    'train iter={}, avg loss {}, acc_top1 {}, acc_top5 {}'.
                    format(iter, cost, top1, top5))
    def test(program, outputs=[avg_cost, acc_top1, acc_top5]):
        iter = 0
        result = [[], [], []]
        for data in valid_loader():
            cost, top1, top5 = exe.run(program,
                                       feed=data,
                                       fetch_list=outputs)
            iter += 1
            if iter % 100 == 0:
                print('eval iter={}, avg loss {}, acc_top1 {}, acc_top5 {}'.
                      format(iter, cost, top1, top5))
            result[0].append(cost)
            result[1].append(top1)
            result[2].append(top5)
        print(' avg loss {}, acc_top1 {}, acc_top5 {}'.format(
            np.mean(result[0]), np.mean(result[1]), np.mean(result[2])))
        return np.mean(result[1]), np.mean(result[2])
    train(main_prog)
    top1_1, top5_1 = test(val_prog)
    paddle.static.save_inference_model(
        path_prefix='./test_quant_post_hpo/model',
        feed_vars=[image, label],
        fetch_vars=[avg_cost, acc_top1, acc_top5],
        executor=exe,
        program=val_prog)
    quant_post_hpo(
        exe,
        place,
        "./test_quant_post_hpo",
        "./test_quant_post_hpo_inference",
        train_sample_generator=sample_generator_creator(),
        eval_sample_generator=sample_generator_creator(),
        model_filename="model.pdmodel",
        params_filename="model.pdiparams",
        save_model_filename='model.pdmodel',
        save_params_filename='model.pdiparams',
        runcount_limit=2)
    quant_post_prog, feed_target_names, fetch_targets = paddle.static.load_inference_model(
        path_prefix='./test_quant_post_hpo_inference/model', executor=exe)
    top1_2, top5_2 = test(quant_post_prog, fetch_targets)
    print("before quantization: top1: {}, top5: {}".format(top1_1, top5_1))
    print("after quantization: top1: {}, top5: {}".format(top1_2, top5_2))