class_docstr: The AdaMax optimizer.
  
  It is a variant of Adam based on the infinity norm
  available at http://arxiv.org/abs/1412.6980 Section 7.
  
  The optimizer updates the weight by::
  
      grad = clip(grad * rescale_grad, clip_gradient) + wd * weight
      m = beta1 * m_t + (1 - beta1) * grad
      u = maximum(beta2 * u, abs(grad))
      weight -= lr / (1 - beta1**t) * m / (u + epsilon)
  
  This optimizer accepts the following parameters in addition to those accepted
  by :class:`.Optimizer`.
  
  Parameters
  ----------
  learning_rate : float, default 0.002
      The initial learning rate. If None, the optimization will use the
      learning rate from ``lr_scheduler``. If not None, it will overwrite
      the learning rate in ``lr_scheduler``. If None and ``lr_scheduler``
      is also None, then it will be set to 0.01 by default.
  beta1 : float, default 0.9
      Exponential decay rate for the first moment estimates.
  beta2 : float, default 0.999
      Exponential decay rate for the second moment estimates.
  use_fused_step : bool, default False
      Whether or not to use fused kernels for optimizer.
      When use_fused_step=False, step is called,
      otherwise, fused_step is called.
code: def __init__(
      self,
      learning_rate=0.002,
      beta1=0.9,
      beta2=0.999,
      epsilon=1e-8,
      use_fused_step=False,
      **kwargs,
  ):
      super(Adamax, self).__init__(
          learning_rate=learning_rate,
          use_fused_step=use_fused_step,
          **kwargs,
      )
      self.beta1 = beta1
      self.beta2 = beta2
      self.epsilon = epsilon
  
imports: from __future__ import absolute_import
  from ..ndarray import zeros, clip, maximum, abs
  from .optimizer import Optimizer, register
label_desc: Use image node_id 1 to create a new Adamax object from inherited base classes: Optimizer with example: obj = Adamax(learning_rate, beta1, beta2, epsilon, use_fused_step)