class_docstr: Stochastic gradient descent optimizer.
  
  V = bV + aG
  W = W - V
  
  Reference: https://paperswithcode.com/method/sgd-with-momentum
code: def apply_gradients(self, W, G):
      if id(W) not in self.Vs:
          raise RuntimeError("Unregonized layer weights")
  
      with tf.name_scope("SGD-apply-gradients"):
          V = self.Vs[id(W)]
          for i in range(len(W)):
              diff = self.momentum * V[i].read_value()
              tfe.assign(
                  W[i],
                  W[i].read_value()
                  - (diff + self.learning_rate * G[i]),
              )
              tfe.assign(V[i], diff + self.learning_rate * G[i])
  
file_path: tf-encrypted/tf_encrypted/keras/optimizers.py
imports: import numpy
  import tensorflow
  import tf_encrypted
label_desc: Use image node_id 3 for calling the SGD obj's underlying member method code with example usage: obj.apply_gradients(W, G) without return types