class_docstr: Adam optimizer; described in https://arxiv.org/abs/1412.6980.
  
  The update rule for time step :math:`t`, given gradients :math:`g_t` and
  "Stepsize" :math:`\alpha`, is:
  
  .. math::
      \hat{m}_t &\leftarrow \big(\beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t\big)\ /\ (1 - \beta_1^t) \\
      \hat{v}_t &\leftarrow \big(\beta_2 \cdot m_{t-1} + (1 - \beta_2) \cdot g_t^2\big)\ /\ (1 - \beta_2^t) \\
      \theta_t  &\leftarrow \theta_{t-1} -\ \alpha \cdot \hat{m}_t / \big(\sqrt{\hat{v}_t} + \epsilon\big)
code: def init(self, weights):
      m = jnp.zeros_like(weights)
      v = jnp.zeros_like(weights)
      return m, v
  
imports: from trax.fastmath import numpy
  from trax.optimizers import base
label_desc: Use image node_id 2 for calling the Adam obj's underlying member method code with example usage: obj.init(weights) and returns: m,  v