lambda架构

VC模拟鼠标动作

  返回  

cleverhans库——FGSM代码实战

2021/8/20 15:23:53 浏览:

什么是cleverhans库?

cleverhans是一个机器学习模型攻防库,里面有很多的攻防技术实现。安装只需pip install cleverhans 这句口令,随后便能调用库里的函数。

FGSM代码——可以直接运行

1、使用了Alexnet模型,然后只放了一张图片,这部分代码主要对图片进行初始化,方便使用

from __future__ import print_function
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
import numpy as np
import matplotlib.pyplot as plt
from torchvision import models
import cv2
from torch.autograd import Variable
#获取计算设备 默认是CPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

#图像加载以及预处理
image_path="data/goldfish.jpg"
orig = cv2.imread(image_path)[..., ::-1]
orig = cv2.resize(orig, (224, 224))
img = orig.copy().astype(np.float32)

mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]
img /= 255.0
img = (img - mean) / std
img = img.transpose(2, 0, 1)

img=np.expand_dims(img, axis=0)

img = Variable(torch.from_numpy(img).to(device).float())
print(img.shape)

#使用预测模式 主要影响droupout和BN层的行为,用的是Alexnet模型,现成的
model = models.alexnet(pretrained=True).to(device).eval()
#取真实标签
label=np.argmax(model(img).data.cpu().numpy())#这里为什么要加cup()?因为np无法直接转为cuda使用,要先转cpu
print("label={}".format(label))

epoch = 1#训练轮次
target = 31#原始图片的标签
target = Variable(torch.Tensor([float(target)]).to(device).long())#转换数据类型
print(target)

2、使用cleverhans实现FGSN攻击,关键代码段是

adver_example = fast_gradient_method(model, img.data, 0.01, np.inf)#(模型,图片数据,扰动值,范数:np.inf、0或1)范数的作用占时不知道
adver_target = torch.max(model(adver_example),1)[1]#取出概率最大的那个标签
#导入cleverhans中的FGSM函数
from cleverhans.torch.attacks.fast_gradient_method import fast_gradient_method
def FGSM(model):
  for i in range(epoch):
    adver_example = fast_gradient_method(model, img.data, 0.01, np.inf)
    adver_target = torch.max(model(adver_example),1)[1]
    if adver_target != target:
        print("FGSM attack 成功")
    print("epoch={} adver_target={}".format(epoch,adver_target))
  return adver_example,adver_target,'FGSM attack'
FGSM(model)

运行结果如下,原来标签为31,之后模型识别为114

 参考链接

https://github.com/cleverhans-lab/cleverhans/tree/master/examples

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号