def test_bias(model_path):
    model = load_model(model_path)
    dic = {}
    dic[5] = []
    dic[10] = []
    dic[20] = []
    dic[30] = []
    dic[50] = []
    for extent in [5, 10, 20, 30, 50]:
        ratio = 0.0
        step = 0.1
        for i in range(5):
            ratio_temp = 0.0
            change = False
            acc = 0.98
            while change | (acc > 0.9):
                ratio = ratio + step
                if ratio == ratio_temp:
                    break
                _, _, _, _, model_change = model_mutation_single_neuron(
                    model, cls='bias', random_ratio=ratio, extent=extent)
                acc = accuracy_mnist(model_change, mnist)
                print(acc)
                if acc <= 0.90:
                    if step != 0.001:
                        ratio_temp = ratio
                        step = step / 10.0
                        ratio = ratio - step * 10.0
                        change = True
                        print(step, ratio)
            dic[extent].append((ratio, acc))
            ratio = 0.0
            step = 0.1
    return dic
def Gen_mutaion(model_path,size=100):
    model=load_model(model_path)
    for index in range(size):
        #这个地方可以使用for语句进行多次变异
        #这个地方自己选择变异的类型权重和比例
        extent = (index/10)*0.5+3
        random_ratio = ((index+1) % 10)*0.05
        _,_,_,_,model_mut=model_change_standard.model_mutation_single_neuron(model,'kernel',random_ratio,extent)
        sys.stdout.write('index:{},extent:{},random_ratio:{}\r'.format(index,extent,random_ratio))
        sys.stdout.flush()
        model_mut.save('./model_bp/mutation/model_mutation_{}.hdf5'.format(index))
def bp_bias(model_path):
    model = load_model(model_path)
    extent_lst = [0.01, 0.1, 0.5, 1.5, 2, 3, 5, 10]
    statistic = {i: [] for i in extent_lst}
    ratio_lst = [0.01, 0.03, 0.05, 0.1, 0.2]

    for extent in extent_lst:
        for ratio in ratio_lst:
            lst = []
            for i in range(10):
                print(i)
                _, _, _, _, model_change = model_mutation_single_neuron(
                    model, cls='bias', random_ratio=ratio, extent=extent)
                acc = accuracy_mnist(model_change, mnist)
                lst.append(acc)
        statistic[extent].append(lst)
    return statistic