class_docstr: Class performing adversarial training following Madry's Protocol.
  
  | Paper link: https://arxiv.org/abs/1706.06083
  
  | Please keep in mind the limitations of defences. While adversarial training is widely regarded as a promising,
      principled approach to making classifiers more robust (see https://arxiv.org/abs/1802.00420), very careful
      evaluations are required to assess its effectiveness case by case (see https://arxiv.org/abs/1902.06705).
class_docstr_tok: ["Class","performing","adversarial","training","following","Madry","'s","Protocol",".","|","Paper","link",":","https",":","\/\/arxiv.org\/abs\/1706.06083","|","Please","keep","in","mind","the","limitations","of","defences",".","While","adversarial","training","is","widely","regarded","as","a","promising",",","principled","approach","to","making","classifiers","more","robust","(","see","https",":","\/\/arxiv.org\/abs\/1802.00420",")",",","very","careful","evaluations","are","required","to","assess","its","effectiveness","case","by","case","(","see","https",":","\/\/arxiv.org\/abs\/1902.06705",")","."]
code: def get_classifier(self) -> "CLASSIFIER_LOSS_GRADIENTS_TYPE":
      return self.trainer.get_classifier()
  
file_path: adversarial-robustness-toolbox/art/defences/trainer/adversarial_trainer_madry_pgd.py
imports: import logging
  from typing import Optional, Union, TYPE_CHECKING
  import numpy
  from art.defences.trainer.trainer import Trainer
  from art.defences.trainer.adversarial_trainer import AdversarialTrainer
  from art.attacks.evasion.projected_gradient_descent.projected_gradient_descent import ProjectedGradientDescent
label_desc: Use image node_id 3 for calling the AdversarialTrainerMadryPGD obj's underlying member method code with example usage: obj.get_classifier() and returns: self