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