code: def update(self, w, grad_wrt_w):
      # If not initialized
      if self.G is None:
          self.G = np.zeros(np.shape(w))
      # Add the square of the gradient of the loss function at w
      self.G += np.power(grad_wrt_w, 2)
      # Adaptive gradient with higher learning rate for sparse data
      return w - self.learning_rate * grad_wrt_w / np.sqrt(
          self.G + self.eps
      )
  
file_path: ML-From-Scratch/mlfromscratch/deep_learning/optimizers.py
imports: import numpy
  from mlfromscratch.utils import make_diagonal, normalize
label_desc: Use image node_id 2 for calling the Adagrad obj's underlying member method code with example usage: obj.update(w, grad_wrt_w) and returns: unknown