class_docstr: Momentum-based Gradient Descent Optimizer
  
  Args:
      x : Optimization variable for initialization of accumulation grad
      stepsize : Stepsize for gradient descent
      momentum : Momentum factor for accumulation grad
      normalize_fn : Function to normalize the gradient
class_docstr_tok: ["Momentum-based","Gradient","Descent","Optimizer","Args",":","x",":","Optimization","variable","for","initialization","of","accumulation","grad","stepsize",":","Stepsize","for","gradient","descent","momentum",":","Momentum","factor","for","accumulation","grad","normalize_fn",":","Function","to","normalize","the","gradient"]
code: def __init__(
      self,
      x: ep.Tensor,
      stepsize: float,
      momentum: float = 1.0,
      normalize_fn: Callable[
          [ep.Tensor], ep.Tensor
      ] = lambda x: x.sign(),
  ):
      self.stepsize = stepsize
      self.momentum = momentum
      self.normalize = normalize_fn
      self.accumulation_grad = ep.zeros_like(x)
  
imports: from functools import partial
  from typing import Callable, Optional
  from foolbox.attacks.gradient_descent_base import normalize_lp_norms
  from .basic_iterative_method import Optimizer, L1BasicIterativeAttack, L2BasicIterativeAttack, LinfBasicIterativeAttack
  import eagerpy
label_desc: Use image node_id 1 to create a new GDMOptimizer object from inherited base classes: Optimizer with example: obj = GDMOptimizer(x, stepsize, momentum, normalize_fn)