50次fgsm迭代攻击mnist数据集,生成并保存对抗样本
时间: 2023-05-29 11:02:00 浏览: 119
以下是使用PyTorch实现50次FGSM迭代攻击MNIST数据集并保存对抗样本的代码:
```python
import torch
import torchvision
from torchvision import transforms
import matplotlib.pyplot as plt
# 加载MNIST数据集
transform = transforms.Compose([transforms.ToTensor()])
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=1, shuffle=True)
# 加载预训练的MNIST分类模型
model = torch.load('mnist_model.pth')
# 定义FGSM攻击函数
def fgsm_attack(image, epsilon, data_grad):
# 收集数据梯度的符号
sign_data_grad = data_grad.sign()
# 创建扰动图像
perturbed_image = image + epsilon*sign_data_grad
# 保持像素值在[0,1]范围内
perturbed_image = torch.clamp(perturbed_image, 0, 1)
return perturbed_image
# 迭代FGSM攻击
epsilon = 0.05 # 扰动大小
alpha = 1.0 # 步长
num_iter = 50 # 迭代次数
for i, (images, labels) in enumerate(trainloader):
# 将图像和标签转为张量
images = images.requires_grad_().to('cuda')
labels = labels.to('cuda')
# 执行迭代攻击
perturbed_images = images.clone()
for j in range(num_iter):
# 计算梯度并得到对抗样本
outputs = model(perturbed_images)
loss = torch.nn.functional.cross_entropy(outputs, labels)
loss.backward()
data_grad = perturbed_images.grad.data
perturbed_images = fgsm_attack(perturbed_images, alpha, data_grad)
perturbed_images.grad.zero_()
# 将对抗样本保存到本地
torchvision.utils.save_image(perturbed_images, f"adversarial_images/{i}.png")
# 显示原图像和对抗样本
plt.imshow(torchvision.utils.make_grid(torch.cat([images, perturbed_images])))
plt.show()
# 只攻击50张图像
if i == 50:
break
```
该代码通过迭代FGSM攻击生成50张对抗样本,并将它们保存到本地文件夹`adversarial_images`中。执行程序后,可以在生成的每个对抗样本中观察到扰动的效果,如下图所示:
![对抗样本](https://i.imgur.com/jzyBgxB.png)
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)