code: def _rmsprop(self, grads, cache=None, decay_rate=0.95):
          
          if cache is None:
              cache = np.zeros_like(grads)
          cache = decay_rate * cache + (1 - decay_rate) * grads ** 2
          step = -grads / np.sqrt(cache + K.epsilon())
          return step, cache
docs: Uses RMSProp to compute step from gradients.
  
          Args:
              grads: numpy array of gradients.
              cache: numpy array of same shape as `grads` as RMSProp cache
              decay_rate: How fast to decay cache
  
          Returns:
              A tuple of
                  step: numpy array of the same shape as `grads` giving the step.
                      Note that this does not yet take the learning rate into account.
                  cache: Updated RMSProp cache.