text: Here is my training model and FGSM and PGD attack to be done on model. Add the pgd and FGSM attack inside your traingn loop. Create specific pertrubations  to best fol the model and classify  them correctly
  
  Attack:
  preprocessing = dict(mean=[0.4901, 0.4617, 0.4061], std=[0.1977, 0.1956, 0.1947], axis=-3)
  fnet = fb.PyTorchModel(net, bounds=(0, 1), preprocessing=preprocessing, device='cpu')
  fgsm = fb.attacks.FGSM()
  pgd = fb.attacks.PGD()
  
  
  
  _, fgsm_clipped_advs, fgsm_success = fgsm(fnet, images, labels, epsilons=0.01)
  
  
  
  _, pgd_clipped_advs, pgd_success = pgd(fnet, images, labels, epsilons=0.01)
  
  
  Model: 
  
  import torch
  import torchvision
  import torchvision.transforms as transforms
  import torch.nn as nn
  import torch.nn.functional as F
  import torch.optim as optim
  
  from zipfile import ZipFile
  from tqdm.auto import tqdm
  import os
  import argparse
  
  parser = argparse.ArgumentParser()
  parser.add_argument('--train_data', type=str, required=True)
  args = parser.parse_args()
  
  ############################################################
  #### defining the network, optimizer, and loss function ####
  ############################################################
  
  class Net(nn.Module):
      def init(self):
          super().init()
          self.conv1 = nn.Conv2d(3, 6, 5)
          self.pool = nn.MaxPool2d(2, 2)
          self.conv2 = nn.Conv2d(6, 16, 5)
          self.fc1 = nn.Linear(16 * 5 * 5, 120)
          self.fc2 = nn.Linear(120, 84)
          self.fc3 = nn.Linear(84, 2)
  
      def forward(self, x):
          x = self.pool(F.relu(self.conv1(x)