class_docstr: Implementation of the MIFace algorithm from Fredrikson et al. (2015). While in that paper the attack is demonstrated
  specifically against face recognition models, it is applicable more broadly to classifiers with continuous features
  which expose class gradients.
  
  | Paper link: https://dl.acm.org/doi/10.1145/2810103.2813677
class_docstr_tok: ["Implementation","of","the","MIFace","algorithm","from","Fredrikson","et","al",".","(","2015",")",".","While","in","that","paper","the","attack","is","demonstrated","specifically","against","face","recognition","models",",","it","is","applicable","more","broadly","to","classifiers","with","continuous","features","which","expose","class","gradients",".","|","Paper","link",":","https",":","\/\/dl.acm.org\/doi\/10.1145\/2810103.2813677"]
docstr: Create an MIFace attack instance.
  
  :param classifier: Target classifier.
  :param max_iter: Maximum number of gradient descent iterations for the model inversion.
  :param window_length: Length of window for checking whether descent should be aborted.
  :param threshold: Threshold for descent stopping criterion.
  :param batch_size: Size of internal batches.
  :param verbose: Show progress bars.
docstr_tok: ["Create","an","MIFace","attack","instance",".",":","param","classifier",":","Target","classifier",".",":","param","max_iter",":","Maximum","number","of","gradient","descent","iterations","for","the","model","inversion",".",":","param","window_length",":","Length","of","window","for","checking","whether","descent","should","be","aborted",".",":","param","threshold",":","Threshold","for","descent","stopping","criterion",".",":","param","batch_size",":","Size","of","internal","batches",".",":","param","verbose",":","Show","progress","bars","."]
code: def __init__(
      self,
      classifier: "CLASSIFIER_CLASS_LOSS_GRADIENTS_TYPE",
      max_iter: int = 10000,
      window_length: int = 100,
      threshold: float = 0.99,
      learning_rate: float = 0.1,
      batch_size: int = 1,
      verbose: bool = True,
  ):
      """
      Create an MIFace attack instance.
  
      :param classifier: Target classifier.
      :param max_iter: Maximum number of gradient descent iterations for the model inversion.
      :param window_length: Length of window for checking whether descent should be aborted.
      :param threshold: Threshold for descent stopping criterion.
      :param batch_size: Size of internal batches.
      :param verbose: Show progress bars.
      """
      super().__init__(estimator=classifier)
  
      self.max_iter = max_iter
      self.window_length = window_length
      self.threshold = threshold
      self.learning_rate = learning_rate
      self.batch_size = batch_size
      self.verbose = verbose
      self._check_params()
  
file_path: adversarial-robustness-toolbox/art/attacks/inference/model_inversion/mi_face.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from typing import Optional, TYPE_CHECKING
  import numpy
  from tqdm.auto import trange
  from art.config import ART_NUMPY_DTYPE
  from art.estimators.classification.classifier import ClassifierMixin, ClassGradientsMixin
  from art.estimators.estimator import BaseEstimator
  from art.attacks.attack import InferenceAttack
  from art.utils import get_labels_np_array, check_and_transform_label_format
label_desc: Use image node_id 1 to create a new MIFace object from inherited base classes: InferenceAttack with example: obj = MIFace(classifier, max_iter, window_length, threshold, learning_rate, batch_size, verbose)