class_docstr: This attack was originally proposed by Miyato et al. (2016) and was used
  for virtual adversarial training.
  Paper link: https://arxiv.org/abs/1507.00677
  
  :param model: cleverhans.model.Model
  :param sess: optional tf.Session
  :param dtypestr: dtype of the data
  :param kwargs: passed through to super constructor
docstr: Note: the model parameter should be an instance of the
  cleverhans.model.Model abstraction provided by CleverHans.
code: def __init__(self, model, sess=None, dtypestr="float32", **kwargs):
      """
      Note: the model parameter should be an instance of the
      cleverhans.model.Model abstraction provided by CleverHans.
      """
      if not isinstance(model, Model):
          wrapper_warning_logits()
          model = CallableModelWrapper(model, "logits")
  
      super(VirtualAdversarialMethod, self).__init__(
          model, sess, dtypestr, **kwargs
      )
  
      self.feedable_kwargs = ("eps", "xi", "clip_min", "clip_max")
      self.structural_kwargs = ["num_iterations"]
  
file_path: cleverhans/cleverhans_v3.1.0/cleverhans/attacks/virtual_adversarial_method.py
imports: import warnings
  import tensorflow
  from cleverhans.attacks.attack import Attack
  from cleverhans.model import Model, CallableModelWrapper
  from cleverhans.model import wrapper_warning_logits
  from cleverhans import utils_tf
label_desc: Use image node_id 1 to create a new VirtualAdversarialMethod object from inherited base classes: Attack with example: obj = VirtualAdversarialMethod(model, sess, dtypestr)