Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
    #     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))
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
    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))
Exemplo n.º 9
0
    # 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))
Exemplo n.º 10
0
    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))