CNN卷积神经网络手写数字集实现对抗样本与对抗攻击实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

在讨论卷积神经网络时,给出了一个用卷积神经网络来完成手写体数学识别的示例,其TensorFlow2版本能达到0.986的识别率。用该卷积神经网络模型来示例对抗样本对神经网络模型的攻击。

用训练好的卷积神经网络模型对该对抗样本图片进行预测,得到错误结果为3。  

记原始样本为x,原始样本的对抗样本为x_adv,添加的扰动为r。它们之间的关系为:

一般来讲,r应尽可能小,体现在对图像的攻击上,就是修改后的对抗样本尽量不被人眼察觉。 被攻击模型的输入输出关系用映射F来表示:

y=F(x)

其中,y为模型对样本x的预测值。

非定向对抗攻击是找到一个尽量小的r,使得:

F(x_adv)=F(x+r)≠y

定向对抗攻击是指定输出的攻击。记指定的攻击目标为y_target,定向对抗攻击就是找到一个尽量小的r,使得:

F(x_adv)=y_target≠y

 原图片预测结果正确

添加扰动后预测结果错误

 

 

部分代码如下

import matplotlib.pyplot as plt
import numpy as np
img = X_val[0]
label = y_val[0]
img = img.reshape(1, 28, 28, 1)
img_predict = model.predict([img], batch_size=None)
img1 = img.reshape(28, 28)
plt.imshow(img1, cmap = 'binary')
print('标签:', np.argmax(label), '模型预测:', np.argmax(img_predict))
epsilon = 0.09
adv_x = img + epsilon * perturbations.numpy()
img_predict = model.predict([adv_x], batch_size=None)
print(np.argmax(img_predict))
plt.imshow(adv_x.reshape(28, 28), cmap = 'binary')
import tensorflow as tf
loss_object = tf.keras.losses.CategoricalCrossentropy()
# 计算梯度
def compute_grad(input_image, input_label):
    with tf.GradientTape() as g:
        g.watch(tensor=input_image) # 将输入样本作为要计算梯度的变量
        prediction = model(input_image)
        loss = loss_object(input_label, prediction)

    gradient = g.gradient(loss, input_image) # 求损失函数的梯度
    return gradient

 创作不易 觉得有帮助请点赞关注收藏~~~

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值