import torch
import random
import copy
import numpy as np
import matplotlib.pyplot as plt
from FL_base_function import test
from AdvBox.adversarialbox.adversary import Adversary
from AdvBox.adversarialbox.attacks.deepfool import DeepFoolAttack
from AdvBox.adversarialbox.models.pytorch import PytorchModel
from attack import vceg
def inference_attack(all_GMs, train_loader, test_loader, device, FL_params):
# 为11*11*20矩阵((特征数+1)*(训练轮数+1)*组数)
train_input = []
test_input = []
# 取多组数据
for each_attack_epoch in range(FL_params.attack_epoch):
# 生成一个0-64随机数
data = random.randint(0, 63)
# 时间轴数组,存放每个数据随着训练轮数变化,距离值的变化
# 最后为11*11矩阵((特征数+1)*(训练轮数+1))
Distance_train = []
Distance_test = []
# 对联邦学习过程中的每次全局模型进行分析
for each_epoch in range(FL_params.global_epoch + 1):
# 目标模型
model = all_GMs[each_epoch]
# 打印选取目标模型在测试集上的准确率
print("attack_epoch: {}, round: {}".format(each_attack_epoch + 1, each_epoch))
if not each_attack_epoch:
test(model, test_loader)
model = model.to(device)
model = model.eval()
# 设置为不保存梯度值 自然也无法修改
for param in model.parameters():
param.requires_grad = False
# input_min = test_loader.sampler.data_source.tensors[0].min()
# input_max = test_loader.sampler.data_source.tensors[0].max()
# bounds = (input_min, input_max)
# M_tgt = PytorchModel(model, None, bounds, channel_axis=1, nb_classes=2)
#
# deepfool_attacker = DeepFoolAttack(M_tgt)
# attacker_config = {"iterations": 500, "overshoot": 0.02}
print("train_predict...")
# distance_train存放的是每一轮中各个数据点的距离值
distance_train = []
# 进入主循环(训练集)
for _, (XX_tgt, YY_tgt) in enumerate(train_loader):
# XX_tgt.shape = [64, 108] -> [1, 108]
# 在一批数据(64)中随机取一个数据点
XX_tgt = XX_tgt[data, :]
XX_tgt = XX_tgt.unsqueeze(0)
XX_tgt = XX_tgt.cpu().numpy()
# 生成一个扰动样本作为测试样本
XX_tgt_new_1 = copy.deepcopy(XX_tgt)
XX_tgt_new_1[0, 102] += 0.2
XX_tgt_new_2 = copy.deepcopy(XX_tgt)
XX_tgt_new_2[0, 0:9] = [1, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_3 = copy.deepcopy(XX_tgt)
XX_tgt_new_3[0, 103] += 0.1
XX_tgt_new_4 = copy.deepcopy(XX_tgt)
XX_tgt_new_4[0, 9:25] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_5 = copy.deepcopy(XX_tgt)
XX_tgt_new_5[0, 104] += 0.5
XX_tgt_new_6 = copy.deepcopy(XX_tgt)
XX_tgt_new_6[0, 25:32] = [1, 0, 0, 0, 0, 0, 0]
XX_tgt_new_7 = copy.deepcopy(XX_tgt)
XX_tgt_new_7[0, 32:47] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_8 = copy.deepcopy(XX_tgt)
XX_tgt_new_8[0, 47:53] = [0, 1, 0, 0, 0, 0]
XX_tgt_new_9 = copy.deepcopy(XX_tgt)
XX_tgt_new_9[0, 53:58] = [1, 0, 0, 0, 0]
XX_tgt_new_10 = copy.deepcopy(XX_tgt)
XX_tgt_new_10[0, 58:60] = [1, 0]
list_label = [XX_tgt, XX_tgt_new_1, XX_tgt_new_2, XX_tgt_new_3,
XX_tgt_new_4, XX_tgt_new_5, XX_tgt_new_6, XX_tgt_new_7,
XX_tgt_new_8, XX_tgt_new_9, XX_tgt_new_10]
YY_tgt = None
for each_XX_tgt in list_label:
each_XX_tgt = torch.from_numpy(each_XX_tgt)
advs = vceg(model, each_XX_tgt)
d = torch.sqrt(torch.sum((torch.from_numpy(XX_tgt) - advs) ** 2))
# adversary = Adversary(each_XX_tgt, YY_tgt)
# adversary = deepfool_attacker(adversary, **attacker_config)
#
# if adversary.is_successful():
# advs = adversary.adversarial_example[0]
#
# # 对抗成功的最小的扰动值
# d = torch.sqrt(torch.sum((torch.from_numpy(XX_tgt) - torch.from_numpy(advs)) ** 2))
#
# print("attack success, adv_label={}, distance={}".format(adversary.adversarial_label, d))
#
# else:
# advs = adversary.bad_adversarial_example[0]
#
# d = torch.sqrt(torch.sum((torch.from_numpy(XX_tgt) - torch.from_numpy(advs)) ** 2))
#
# print("attack failed, distance=", d)
print(f"distance= {d}")
distance_train.append(d)
# 只进行一轮
break
print("test_predict...")
distance_test = []
# 进入主循环(测试集)
for _, (XX_tgt, YY_tgt) in enumerate(test_loader):
# XX_tgt.shape = [64, 108] -> [1, 108]
# 在一批数据(64)中随机取一个数据点
XX_tgt = XX_tgt[data, :]
XX_tgt = XX_tgt.unsqueeze(0)
XX_tgt = XX_tgt.cpu().numpy()
# 生成一个扰动样本作为测试样本
XX_tgt_new_1 = copy.deepcopy(XX_tgt)
XX_tgt_new_1[0, 102] += 0.2
XX_tgt_new_2 = copy.deepcopy(XX_tgt)
XX_tgt_new_2[0, 0:9] = [1, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_3 = copy.deepcopy(XX_tgt)
XX_tgt_new_3[0, 103] += 0.1
XX_tgt_new_4 = copy.deepcopy(XX_tgt)
XX_tgt_new_4[0, 9:25] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_5 = copy.deepcopy(XX_tgt)
XX_tgt_new_5[0, 104] += 0.5
XX_tgt_new_6 = copy.deepcopy(XX_tgt)
XX_tgt_new_6[0, 25:32] = [1, 0, 0, 0, 0, 0, 0]
XX_tgt_new_7 = copy.deepcopy(XX_tgt)
XX_tgt_new_7[0, 32:47] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
XX_tgt_new_8 = copy.deepcopy(XX_tgt)
XX_tgt_new_8[0, 47:53] = [0, 1, 0, 0, 0, 0]
XX_tgt_new_9 = copy.deepcopy(XX_tgt)
XX_tgt_new_9[0, 53:58] = [1, 0, 0, 0, 0]
XX_tgt_new_10 = copy.deepcopy(XX_tgt)
XX_tgt_new_10[0, 58:60] = [1, 0]
list_label = [XX_tgt, XX_tgt_new_1, XX_tgt_new_2, XX_tgt_new_3,
XX_tgt_new_4, XX_tgt_new_5, XX_tgt_new_6, XX_tgt_new_7,
XX_tgt_new_8, XX_tgt_new_9, XX_tgt_new_10]
# list_label = feature_extract(XX_tgt, FL_params.n_feature)
YY_tgt = None
for each_XX_tgt in list_label:
#
# adversary = Adversary(each_XX_tgt, YY_tgt)
# adversary = deepfool_attacker(adversary, **attacker_config)
#
# if adversary.is_successful():
# advs = adversary.adversarial_example[0]
#
# # 对抗成功的最小的扰动值
# d = torch.sqrt(torch.sum((torch.from_numpy(XX_tgt) - torch.from_numpy(advs)) ** 2))
#
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip 课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip 课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip 课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
课程大作业基于联邦学习模型的对抗攻击python源码+详细注释+模型.zip (17个子文件)
Distance
input_test_distance_adult.pth 37KB
input_train_distance_adult.pth 37KB
attack_function.py 13KB
Siamese_Network.py 10KB
介绍.md 40B
attack.py 7KB
FL_base_function.py 6KB
adversial_MIA.py 4KB
Distance_vceg
input_train_distance_adult2.pth 73KB
input_test_distance_adult1.pth 73KB
input_test_distance_adult.pth 73KB
input_train_distance_adult3.pth 73KB
input_test_distance_adult3.pth 73KB
input_test_distance_adult2.pth 73KB
input_train_distance_adult1.pth 73KB
input_train_distance_adult.pth 73KB
FL_model_data_init.py 12KB
共 17 条
- 1
资源评论
Make程序设计
- 粉丝: 5618
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功