def gen_data(model_name, use_adv=True, deepxplore=False): model_path = model_conf.get_model_path(model_conf.svhn, model_name) # (X_train, Y_train), (X_test, Y_test) = SVNH_DatasetUtil.load_data() Y_test = np.argmax(Y_test, axis=1) # model_path = './model/model_svhn.hdf5' if use_adv: attack_lst = ['cw', 'fgsm', 'jsma', 'bim'] adv_image_all = [] adv_label_all = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, model_conf.svhn, model_name) adv_image_all.append(np.load(im)) adv_label_all.append(np.load(lab)) adv_image_all = np.concatenate(adv_image_all, axis=0) adv_label_all = np.concatenate(adv_label_all, axis=0) print("adv: ", len(adv_image_all)) test = np.concatenate([X_test, adv_image_all], axis=0) true_test = np.concatenate([Y_test, adv_label_all], axis=0) else: test = X_test true_test = Y_test train = X_train model = load_model(model_path) model.summary() pred_test_prob = model.predict(test) pred_test = np.argmax(pred_test_prob, axis=1) input = model.layers[0].output # print(dir(model.layers[0])) # print(input) if not deepxplore: if model_name == model_conf.LeNet5: layers = [model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, model.layers[9].output, model.layers[10].output] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) else: # Vgg16 layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) else: if model_name == model_conf.LeNet5: layers = [model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[8].output, model.layers[8].output, model.layers[9].output, model.layers[10].output] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) else: layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) # print(len(layers), layers) return input, layers, test, train, pred_test, true_test, pred_test_prob
def gen_data(name, model_name, nb_classes=10): X_train, X_val, X_test, Y_train, Y_val, Y_test = None, None, None, None, None, None if name.startswith("mnist"): X_train, X_test, Y_train, Y_test, = gen_data_mnist() # 获得原始数据集 elif name.startswith("fashion"): X_train, X_test, Y_train, Y_test, = gen_data_fashion() # 获得原始数据集 elif name.startswith("svhn"): X_train, X_test, Y_train, Y_test, = gen_data_svhn() # 获得原始数据集 elif name.startswith("cifar"): X_train, X_test, Y_train, Y_test, = gen_data_cifar() # 获得原始数据集 attack_lst = ['cw', 'fgsm', 'jsma', 'bim'] adv_image_test_arr = [] adv_label_test_arr = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, name, model_name) attack_test = np.load(im) attack_lable = np.load(lab) adv_image_test_arr.append(attack_test) adv_label_test_arr.append(attack_lable) adv_X_test = np.concatenate(adv_image_test_arr, axis=0) adv_Y_test = np.concatenate(adv_label_test_arr, axis=0) adv_Y_test = np_utils.to_categorical(adv_Y_test, nb_classes) X_test = adv_X_test Y_test = adv_Y_test # 1w条数据 # adv_X_test, _, adv_Y_test, _ = train_test_split(adv_X_test, adv_Y_test, train_size=5000, random_state=42) # X_test, _, Y_test, _ = train_test_split(X_test, Y_test, train_size=5000, random_state=42) # X_test = np.r_[X_test, adv_X_test] # 共1w条 # Y_test = np.r_[Y_test, adv_Y_test] # adv_X_test, _, adv_Y_test, _ = train_test_split(adv_X_test, adv_Y_test, train_size=5000) # X_test, _, Y_test, _ = train_test_split(X_test, Y_test, train_size=5000) # adv_Y_test = np_utils.to_categorical(adv_Y_test, nb_classes) # X_test = np.concatenate([X_test, adv_X_test], axis=0) # 共1w条 2000:8000 # Y_test = np.concatenate([Y_test, adv_Y_test], axis=0) return X_train, X_test, Y_train, Y_test
def gen_data(model_name, use_adv=True, deepxplore=False): # path = './fashion-mnist/data/fashion' # X_train, Y_train = mnist_reader.load_mnist(path, kind='train') # X_test, Y_test = mnist_reader.load_mnist(path, kind='t10k') # X_train = X_train.astype('float32').reshape(-1, 28, 28, 1) # X_test = X_test.astype('float32').reshape(-1, 28, 28, 1) # X_train /= 255 # X_test /= 255 ### modify (X_train, y_train), (X_test, Y_test) = fashion_mnist.load_data() ### modify X_train = X_train.astype('float32').reshape(-1, 28, 28, 1) X_test = X_test.astype('float32').reshape(-1, 28, 28, 1) X_train /= 255 X_test /= 255 model_path = model_conf.get_model_path(model_conf.fashion, model_name) if use_adv: attack_lst = ['fgsm', 'jsma', 'bim', 'cw'] adv_image_all = [] adv_label_all = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, model_conf.fashion, model_name) adv_image_all.append(np.load(im)) adv_label_all.append(np.load(lab)) adv_image_all = np.concatenate(adv_image_all, axis=0) adv_label_all = np.concatenate(adv_label_all, axis=0) print("adv: ", len(adv_image_all)) test = np.concatenate([X_test, adv_image_all], axis=0) true_test = np.concatenate([Y_test, adv_label_all], axis=0) else: test = X_test true_test = Y_test train = X_train model = load_model(model_path) pred_test_prob = model.predict(test) pred_test = np.argmax(pred_test_prob, axis=1) input = model.layers[0].output lst = [] for index, layer in enumerate(model.layers): if 'activation' in layer.name: lst.append(index) lst.append(len(model.layers) - 1) # 是否deepxplore if not deepxplore: if model_name == model_conf.LeNet5: # 选择模型 layers = [ model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) elif model_name == model_conf.LeNet1: # LeNet1 layers = [ model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, ] # print(model.layers[1], model.layers[3], model.layers[6]) layers = list(zip(4 * ['conv'] + 1 * ['dense'], layers)) # else: # ResNet20 layers = [] for index in lst: layers.append(model.layers[index].output) layers = list(zip(19 * ['conv'] + 1 * ['dense'], layers)) else: if model_name == model_conf.LeNet5: layers = [ model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[8].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) elif model_name == model_conf.LeNet1: # LeNet1 layers = [ model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[6].output, model.layers[8].output, ] layers = list(zip(4 * ['conv'] + 1 * ['dense'], layers)) else: layers = [] for index in lst: if index != len(model.layers) - 1: layers.append(model.layers[index - 1].output) else: layers.append(model.layers[index].output) layers = list(zip(19 * ['conv'] + 1 * ['dense'], layers)) return input, layers, test, train, pred_test, true_test, pred_test_prob
# print("update csv") # df = pd.read_csv(path, index_col=0) # for k, v in dic.items(): # df[k] = v # df.to_csv(path) if __name__ == '__main__': os.environ["CUDA_VISIBLE_DEVICES"] = "1" x = "./all_output/output_fashion/resNet20/" if not os.path.exists(x): os.makedirs(x) x = "./all_output/output_fashion/LeNet1/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.LeNet1 exec(model_name) print("dataset", "model_name") print(model_conf.fashion, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.fashion, model_name)) # 39992 print("================================================================") model_name = model_conf.resNet20 exec(model_name) print("dataset", "model_name") print(model_conf.fashion, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.fashion, model_name))
def gen_data_cifar(model_name, use_adv=True, deepxplore=False): model_path = model_conf.get_model_path(model_conf.cifar10, model_name) (X_train, Y_train), (X_test, Y_test) = cifar10.load_data() # 32*32 X_train = X_train.astype('float32').reshape(-1, 32, 32, 3) X_test = X_test.astype('float32').reshape(-1, 32, 32, 3) X_train /= 255 X_test /= 255 Y_train = Y_train.reshape(-1) Y_test = Y_test.reshape(-1) # model_path = './model/model_cifar10.h5' if use_adv: attack_lst = ['cw', 'fgsm', 'jsma', 'bim'] adv_image_all = [] adv_label_all = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, model_conf.cifar10, model_name) adv_image_all.append(np.load(im)) adv_label_all.append(np.load(lab)) adv_image_all = np.concatenate(adv_image_all, axis=0) adv_label_all = np.concatenate(adv_label_all, axis=0) test = np.concatenate([X_test, adv_image_all], axis=0) true_test = np.concatenate([Y_test, adv_label_all], axis=0) else: test = X_test true_test = Y_test train = X_train model = load_model(model_path) pred_test_prob = model.predict(test) pred_test = np.argmax(pred_test_prob, axis=1) input = model.layers[0].output lst = [] for index, layer in enumerate(model.layers): if 'activation' in layer.name: lst.append(index) lst.append(len(model.layers) - 1) if not deepxplore: if model_name == model_conf.resNet20: layers = [] for index in lst: layers.append(model.layers[index].output) layers = list(zip(19 * ['conv'] + 1 * ['dense'], layers)) else: # Vgg16 layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) else: if model_name == model_conf.resNet20: layers = [] for index in lst: if index != len(model.layers) - 1: layers.append(model.layers[index - 1].output) else: layers.append(model.layers[index].output) layers = list(zip(19 * ['conv'] + 1 * ['dense'], layers)) else: layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) return input, layers, test, train, pred_test, true_test, pred_test_prob, Y_train
def gen_data_svhn(model_name, use_adv=True, deepxplore=False): model_path = model_conf.get_model_path(model_conf.svhn, model_name) # (X_train, Y_train), (X_test, Y_test) = SVNH_DatasetUtil.load_data() Y_train = np.argmax(Y_train, axis=1) # modify 原本是一堆矩阵,[0,0,0,1,0]代表第四类 Y_test = np.argmax(Y_test, axis=1) if use_adv: attack_lst = ['cw', 'fgsm', 'jsma', 'bim'] adv_image_all = [] adv_label_all = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, model_conf.svhn, model_name) adv_image_all.append(np.load(im)) adv_label_all.append(np.load(lab)) adv_image_all = np.concatenate(adv_image_all, axis=0) adv_label_all = np.concatenate(adv_label_all, axis=0) test = np.concatenate([X_test, adv_image_all], axis=0) true_test = np.concatenate([Y_test, adv_label_all], axis=0) else: test = X_test true_test = Y_test train = X_train model = load_model(model_path) pred_test_prob = model.predict(test) pred_test = np.argmax(pred_test_prob, axis=1) input = model.layers[0].output lst = [] for index, layer in enumerate(model.layers): if 'activation' in layer.name: lst.append(index) lst.append(len(model.layers) - 1) if not deepxplore: if model_name == model_conf.LeNet5: layers = [ model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) else: # Vgg16 layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) else: if model_name == model_conf.LeNet5: layers = [ model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[8].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) else: layers = [] for i in range(1, 19): layers.append(model.layers[i].output) for i in range(20, 23): layers.append(model.layers[i].output) layers = list(zip(18 * ['conv'] + 3 * ['dense'], layers)) return input, layers, test, train, pred_test, true_test, pred_test_prob, Y_train
def gen_data_mnist( model_name, use_adv=False, deepxplore=False, ): model_path = model_conf.get_model_path(model_conf.mnist, model_name) # (X_train, Y_train), (X_test, Y_test) = mnist.load_data() # 28*28 X_train = X_train.astype('float32').reshape(-1, 28, 28, 1) X_test = X_test.astype('float32').reshape(-1, 28, 28, 1) X_train /= 255 X_test /= 255 # model_path = './model/model_mnist.hdf5' if use_adv: attack_lst = ['fgsm', 'jsma', 'bim', 'cw'] adv_image_all = [] adv_label_all = [] for attack in attack_lst: im, lab = model_conf.get_adv_path(attack, model_conf.mnist, model_name) adv_image_all.append(np.load(im)) adv_label_all.append(np.load(lab)) adv_image_all = np.concatenate(adv_image_all, axis=0) adv_label_all = np.concatenate(adv_label_all, axis=0) test = np.concatenate([X_test, adv_image_all], axis=0) true_test = np.concatenate([Y_test, adv_label_all], axis=0) else: test = X_test true_test = Y_test train = X_train model = load_model(model_path) pred_test_prob = model.predict(test) pred_test = np.argmax(pred_test_prob, axis=1) input = model.layers[0].output if not deepxplore: # if model_name == model_conf.LeNet5: layers = [ model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) # 激活,池化,全连接 else: layers = [ model.layers[2].output, model.layers[3].output, model.layers[5].output, model.layers[6].output, model.layers[8].output, ] # print(model.layers[1], model.layers[3], model.layers[6]) layers = list(zip(4 * ['conv'] + 1 * ['dense'], layers)) # else: if model_name == model_conf.LeNet5: layers = [ model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[8].output, model.layers[8].output, model.layers[9].output, model.layers[10].output ] layers = list(zip(4 * ['conv'] + 3 * ['dense'], layers)) # 卷积,池化,全连接 else: layers = [ model.layers[1].output, model.layers[3].output, model.layers[4].output, model.layers[6].output, model.layers[8].output, ] layers = list(zip(4 * ['conv'] + 1 * ['dense'], layers)) return input, layers, test, train, pred_test, true_test, pred_test_prob, Y_train
dic['mnist_adv_snac_std_1'] = (start - end) start = time.time() exp(model_name, coverage='snac', use_adv=True, std=0) end = time.time() dic['mnist_adv_snac_std_0'] = (start - end) if __name__ == '__main__': os.environ["CUDA_VISIBLE_DEVICES"] = "1" x = "./all_output/output_svhn/vgg16/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.vgg16 exec(model_name) print("dataset", "model_name") print(model_conf.svhn, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.svhn, model_name)) print("================================================================") x = "./all_output/output_svhn/LeNet5/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.LeNet5 exec(model_name) print("dataset", "model_name") print(model_conf.svhn, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.svhn, model_name))
# else: # print("update csv") # df = pd.read_csv(path, index_col=0) # for k, v in dic.items(): # df[k] = v # df.to_csv(path) if __name__ == '__main__': os.environ["CUDA_VISIBLE_DEVICES"] = "1" x = "./all_output/output_cifar/vgg16/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.vgg16 exec(model_name) print("dataset", "model_name") print(model_conf.cifar10, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.cifar10, model_name)) print("================================================================") x = "./all_output/output_cifar/resNet20/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.resNet20 exec(model_name) print("dataset", "model_name") print(model_conf.cifar10, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.cifar10, model_name))
start = time.time() exp(model_name, coverage='snac', use_adv=True, std=0) end = time.time() dic['mnist_adv_snac_std_0'] = (start - end) if __name__ == '__main__': os.environ["CUDA_VISIBLE_DEVICES"] = "1" x = "./all_output/output_mnist/LeNet1/" if not os.path.exists(x): os.makedirs(x) x = "./all_output/output_mnist/LeNet5/" if not os.path.exists(x): os.makedirs(x) model_name = model_conf.LeNet1 # 39854 exec(model_name) print("dataset", "model_name") print(model_conf.mnist, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.mnist, model_name)) print("================================================================") model_name = model_conf.LeNet5 # 39705 exec(model_name) print("dataset", "model_name") print(model_conf.mnist, model_name) print("adv path") print(model_conf.get_adv_path("cw", model_conf.mnist, model_name))