在您的这个fork中
https://github.com/MrWater98/backdoor_federated_learning
其中联邦学习的数据集投毒部分
range_no_id = list(range(50000))
for image in self.params['poison_images'] + self.params['poison_images_test']:
if image in range_no_id:
range_no_id.remove(image)
上面这段代码在 the backdoor_federated_learning/image_helper.py. 的103行。
为什么这一段是将数据集中具有特定性质的图像移除出去呢?
在training.py中,
for batch_id, batch in enumerate(data_iterator):
if helper.params['type'] == 'image':
for i in range(helper.params['poisoning_per_batch']):
for pos, image in enumerate(helper.params['poison_images']):
poison_pos = len(helper.params['poison_images'])*i + pos
#random.randint(0, len(batch))
batch[0][poison_pos] = helper.train_dataset[image][0]
batch[0][poison_pos].add_(torch.FloatTensor(batch[0][poison_pos].shape).normal_(0, helper.params['noise_level']))
batch[1][poison_pos] = helper.params['poison_label_swap']
data, targets = helper.get_batch(poisoned_data, batch, False)
上面这段代码在 backdoor_federated_learning/training.py 的166行。
可以看到这段代码是在修改投毒数据的标签,如果已经将data_iterator中的特定数据移除还怎么修改其标签呢?
感谢您的解答