Skip to content

Commit 95c778e

Browse files
authored
Merge pull request #2327 from f4str/activation-defense-bug
Fix `ActivationDefense` and `SpectralSignatures` expected flattened bug
2 parents a281f62 + fc7cbcb commit 95c778e

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

art/defences/detector/poison/activation_defence.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,9 @@ def _get_activations(self, x_train: Optional[np.ndarray] = None) -> np.ndarray:
695695

696696
# wrong way to get activations activations = self.classifier.predict(self.x_train)
697697
if isinstance(activations, np.ndarray):
698-
nodes_last_layer = np.shape(activations)[1]
698+
# flatten activations across batch
699+
activations = np.reshape(activations, (activations.shape[0], -1))
700+
nodes_last_layer = activations.shape[1]
699701
else:
700702
raise ValueError("activations is None or tensor.")
701703

art/defences/detector/poison/spectral_signature_defense.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ def detect_poison(self, **kwargs) -> Tuple[dict, List[int]]:
121121
raise ValueError("Wrong type detected.")
122122

123123
if features_x_poisoned is not None:
124+
# flatten activations across batch
125+
features_x_poisoned = np.reshape(features_x_poisoned, (features_x_poisoned.shape[0], -1))
124126
features_split = segment_by_class(features_x_poisoned, self.y_train, self.classifier.nb_classes)
125127
else:
126128
raise ValueError("Activation are `None`.")

0 commit comments

Comments
 (0)