From 6e24050d873658bb90050d51b5569c2e585b088e Mon Sep 17 00:00:00 2001 From: TrueSalmonKing Date: Fri, 16 May 2025 10:45:50 +0200 Subject: [PATCH 1/3] add dropout to fix batch size mismatch and device mismatch when using modular_attack --- src/secmlt/adv/evasion/modular_attack.py | 12 ++++++------ src/secmlt/trackers/trackers.py | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/secmlt/adv/evasion/modular_attack.py b/src/secmlt/adv/evasion/modular_attack.py index 93f2e0f5..7dfb96b1 100644 --- a/src/secmlt/adv/evasion/modular_attack.py +++ b/src/secmlt/adv/evasion/modular_attack.py @@ -232,14 +232,14 @@ def _run( # keep perturbation with highest loss best_delta.data = torch.where( - atleast_kd(losses.detach().cpu() < best_losses, len(samples.shape)), - delta.data, - best_delta.data, + atleast_kd(losses.detach().cpu() < best_losses.detach().cpu(), len(samples.shape)), + delta.detach().cpu().data, + best_delta.detach().cpu().data, ) best_losses.data = torch.where( - losses.detach().cpu() < best_losses, + losses.detach().cpu() < best_losses.detach().cpu(), losses.detach().cpu(), - best_losses.data, + best_losses.detach().cpu().data, ) - x_adv, _ = self.manipulation_function(samples.data, best_delta.data) + x_adv, _ = self.manipulation_function(samples.detach().cpu().data, best_delta.data) return x_adv, best_delta diff --git a/src/secmlt/trackers/trackers.py b/src/secmlt/trackers/trackers.py index ff476f6b..7499038e 100644 --- a/src/secmlt/trackers/trackers.py +++ b/src/secmlt/trackers/trackers.py @@ -68,6 +68,10 @@ def get(self) -> torch.Tensor: torch.Tensor History of tracked parameters. """ + # Dropout of the last batch element if there is a size mismatch + reference_size = self.tracked[0].size() + if self.tracked[-1].size() != reference_size: + self.tracked.pop() return torch.stack(self.tracked, -1) def get_last_tracked(self) -> Union[None, torch.Tensor]: From 967bf922da9f4f51c95f9860db618b2a92bb9372 Mon Sep 17 00:00:00 2001 From: Hicham eddoubi Date: Mon, 28 Jul 2025 16:33:50 +0200 Subject: [PATCH 2/3] Update advlib_base.py parameter epsilon --- src/secmlt/adv/evasion/advlib_attacks/advlib_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py b/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py index 01745107..242df8b9 100644 --- a/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py +++ b/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py @@ -74,7 +74,7 @@ def _run( model=model, inputs=samples, labels=labels, - ε=self.epsilon, + eps=self.epsilon, targeted=(self.y_target is not None), loss_function=self.loss_function, ) From 28980fe9da896f08b5126f6b6347246a4368835a Mon Sep 17 00:00:00 2001 From: Hicham eddoubi Date: Tue, 29 Jul 2025 14:39:23 +0200 Subject: [PATCH 3/3] Update advlib_base.py --- src/secmlt/adv/evasion/advlib_attacks/advlib_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py b/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py index 242df8b9..2887d0cb 100644 --- a/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py +++ b/src/secmlt/adv/evasion/advlib_attacks/advlib_base.py @@ -64,7 +64,7 @@ def _run( samples: torch.Tensor, labels: torch.Tensor, ) -> torch.Tensor: - if not isinstance(model, BasePytorchClassifier): + if not isinstance(model, BasePytorchClassifier) and not isinstance(model, EnsembleModel): msg = "Model type not supported." raise NotImplementedError(msg) device = model._get_device()