fdd-defense
23 строки · 697.0 Байт
1import numpy as np2from fdd_defense.attackers.base import BaseAttacker3
4
5class PGDAttacker(BaseAttacker):6def __init__(7self,8model: object,9eps: float,10num_steps: int=10,11):12super().__init__(model, eps)13self.alpha = self.eps / num_steps14self.num_steps = num_steps15
16def attack(self, ts, label):17super().attack(ts, label)18delta = np.zeros_like(ts)19for _ in range(self.num_steps):20grad = self.model.get_grad(ts + delta, label)21delta += self.alpha * np.sign(grad)22delta = np.clip(delta, a_min=-self.eps, a_max=self.eps)23return ts + delta24