IndexError: tensors used as indices must be long, byte or bool tensors
在使用FoolBox辅助对抗样本攻击时报错
images, labels = ep.astensors(*samples(fmodel, dataset="cifar10", batchsize=16))
attack = fb.attacks.L2CarliniWagnerAttack(steps=100)
raw, clipped, is_adv = attack(fmodel, images, labels, epsilons=0.03)
错误原因是attack中处理的参数必须是long, byte or bool tensors类型的,而上面代码中的labels的dtype是int32,所以会报错。
将labels的类型修改为int64即可:
attack = fb.attacks.L2CarliniWagnerAttack(steps=100)
raw, clipped, is_adv = attack(fmodel, images, labels.astype(dtype=torch.int64), epsilons=0.03)