mnist_tutorial_fgsm.py 2.2 KB
Newer Older
G
gx_wind 已提交
1 2 3 4 5 6 7 8 9 10 11
"""
FGSM demos on mnist using advbox tool.
"""
import paddle.v2 as paddle
import paddle.v2.fluid as fluid
import matplotlib.pyplot as plt
import numpy as np

from advbox.models.paddle import PaddleModel
from advbox.attacks.gradientsign import GradientSignAttack

G
gx_wind 已提交
12

G
gx_wind 已提交
13 14 15 16 17 18 19 20 21 22
def cnn_model(img):
    """
    Mnist cnn model
    Args:
        img(Varaible): the input image to be recognized
    Returns:
        Variable: the label prediction
    """
    #conv1 = fluid.nets.conv2d()
    conv_pool_1 = fluid.nets.simple_img_conv_pool(
G
gx_wind 已提交
23 24 25 26 27 28
        input=img,
        num_filters=20,
        filter_size=5,
        pool_size=2,
        pool_stride=2,
        act='relu')
G
gx_wind 已提交
29 30

    conv_pool_2 = fluid.nets.simple_img_conv_pool(
G
gx_wind 已提交
31 32 33 34 35 36
        input=conv_pool_1,
        num_filters=50,
        filter_size=5,
        pool_size=2,
        pool_stride=2,
        act='relu')
G
gx_wind 已提交
37

G
gx_wind 已提交
38
    logits = fluid.layers.fc(input=conv_pool_2, size=10, act='softmax')
G
gx_wind 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
    return logits


def main():
    """
    Advbox demo which demonstrate how to use advbox.
    """
    IMG_NAME = 'img'
    LABEL_NAME = 'label'

    img = fluid.layers.data(name=IMG_NAME, shape=[1, 28, 28], dtype='float32')
    # gradient should flow
    img.stop_gradient = False
    label = fluid.layers.data(name=LABEL_NAME, shape=[1], dtype='int64')
    logits = cnn_model(img)
    cost = fluid.layers.cross_entropy(input=logits, label=label)
    avg_cost = fluid.layers.mean(x=cost)

    place = fluid.CPUPlace()
    exe = fluid.Executor(place)

    BATCH_SIZE = 1
    train_reader = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.mnist.train(), buf_size=500),
        batch_size=BATCH_SIZE)
    feeder = fluid.DataFeeder(
G
gx_wind 已提交
66 67 68
        feed_list=[IMG_NAME, LABEL_NAME],
        place=place,
        program=fluid.default_main_program())
G
gx_wind 已提交
69

G
gx_wind 已提交
70 71
    fluid.io.load_params(
        exe, "./mnist/", main_program=fluid.default_main_program())
G
gx_wind 已提交
72 73

    # advbox demo
G
gx_wind 已提交
74 75
    m = PaddleModel(fluid.default_main_program(), IMG_NAME, LABEL_NAME,
                    logits.name, avg_cost.name, (-1, 1))
G
gx_wind 已提交
76 77 78 79 80 81 82 83
    att = GradientSignAttack(m)
    for data in train_reader():
        # fgsm attack
        adv_img = att(data)
        plt.imshow(n[0][0], cmap='Greys_r')
        plt.show()
        #np.save('adv_img', adv_img)
        break
G
gx_wind 已提交
84 85


G
gx_wind 已提交
86 87
if __name__ == '__main__':
    main()