Lab 1 - Harshil - Parmar
Lab 1 - Harshil - Parmar
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
from torch.utils.data import Dataset, DataLoader
import idx2numpy
import matplotlib.pyplot as plt
from secml.adv.attacks.evasion import CAttackEvasionPGD
from secml.array import CArray
from secml.ml.classifiers import CClassifierPyTorch
from secml.optim.constraints import CConstraintL2, CConstraintBox
from secml.figure import CFigure
class CustomMNISTDataset(Dataset):
def __init__(self, images, labels, transform=None):
self.images = images
self.labels = labels
self.transform = transform
def __len__(self):
return len(self.labels)
if self.transform:
image = self.transform(image)
# Create DataLoaders
train_dataset = CustomMNISTDataset(train_images, train_labels, transform=transform)
test_dataset = CustomMNISTDataset(test_images, test_labels, transform=transform)
mean = 0.1307
std = 0.3081
x = x * std + mean # Reverse normalization
solver_params = {
'eta': 0.3,
'max_iter': 100,
'eps': 1e-4
}
n_attack = CAttackEvasionPGD(
classifier=cmodel, # Target model
double_init=False, # Disable double initialization
distance='l2', # L2 norm attack
dmax=0.2, # Equivalent to epsilon (perturbation budget)
lb=0.0, # Lower bound (normalized image range)
ub=1.0, # Upper bound (normalized image range)
attack_classes='all',# Attack all classes
solver_params=solver_params
)
digs = list(range(10))