def METHOD_NAME(self):
    train_program = paddle.static.Program()
    startup_program = paddle.static.Program()
    with paddle.static.program_guard(train_program, startup_program):
        input = paddle.static.data(name="image", shape=[None, 3, 16, 16])
        conv1 = conv_bn_layer(input, 8, 3, "conv1")
        conv2 = conv_bn_layer(conv1, 8, 3, "conv2")
        sum1 = conv1 + conv2
        conv3 = conv_bn_layer(sum1, 8, 3, "conv3")
        conv4 = conv_bn_layer(conv3, 8, 3, "conv4")
        sum2 = conv4 + sum1
        conv5 = conv_bn_layer(sum2, 8, 3, "conv5")
        conv6 = conv_bn_layer(conv5, 8, 3, "conv6")
        feature = paddle.reshape(conv6, [-1, 128, 16])
        predict = paddle.static.nn.fc(feature, 10, activation='softmax')
        label = paddle.static.data(
            name='label', shape=[None, 1], dtype='int64')
        print(label.shape)
        print(predict.shape)
        cost = paddle.nn.functional.cross_entropy(
            input=predict, label=label)
        avg_cost = paddle.mean(x=cost)
        adam_optimizer = paddle.optimizer.Adam(learning_rate=0.01)
        adam_optimizer.minimize(avg_cost)
    place = paddle.CPUPlace()
    exe = paddle.static.Executor(place)
    scope = paddle.static.global_scope()
    exe.run(startup_program, scope=scope)
    criterion = 'bn_scale'
    pruner = Pruner(criterion)
    main_program, _, _ = pruner.prune(
        train_program,
        scope,
        params=["conv4_weights"],
        ratios=[0.5],
        place=place,
        lazy=False,
        only_graph=False,
        param_backup=None,
        param_shape_backup=None)
    x = numpy.random.random(size=(10, 3, 16, 16)).astype('float32')
    label = numpy.random.random(size=(10, 1)).astype('int64')
    loss_data, = exe.run(train_program,
                         feed={"image": x,
                               "label": label},
                         fetch_list=[cost.name])
    save_model(exe, main_program, 'model_file')
    pruned_program = paddle.static.Program()
    pruned_startup_program = paddle.static.Program()
    with paddle.static.program_guard(pruned_program,
                                     pruned_startup_program):
        input = paddle.static.data(name="image", shape=[None, 3, 16, 16])
        conv1 = conv_bn_layer(input, 8, 3, "conv1")
        conv2 = conv_bn_layer(conv1, 8, 3, "conv2")
        sum1 = conv1 + conv2
        conv3 = conv_bn_layer(sum1, 8, 3, "conv3")
        conv4 = conv_bn_layer(conv3, 8, 3, "conv4")
        sum2 = conv4 + sum1
        conv5 = conv_bn_layer(sum2, 8, 3, "conv5")
        conv6 = conv_bn_layer(conv5, 8, 3, "conv6")
    pruned_test_program = pruned_program.clone(for_test=True)
    exe.run(pruned_startup_program)
    load_model(exe, pruned_program, 'model_file')
    load_model(exe, pruned_test_program, 'model_file')
    shapes = {
        "conv1_weights": (4, 3, 3, 3),
        "conv2_weights": (4, 4, 3, 3),
        "conv3_weights": (8, 4, 3, 3),
        "conv4_weights": (4, 8, 3, 3),
        "conv5_weights": (8, 4, 3, 3),
        "conv6_weights": (8, 8, 3, 3)
    }
    for param in pruned_program.global_block().all_parameters():
        if "weights" in param.name:
            print("param: {}; param shape: {}".format(param.name,
                                                      param.shape))
            self.assertTrue(param.shape == shapes[param.name])
    for param in pruned_test_program.global_block().all_parameters():
        if "weights" in param.name:
            print("param: {}; param shape: {}".format(param.name,
                                                      param.shape))
            self.assertTrue(param.shape == shapes[param.name])