code: def testVariableLearningRate(self):
      parameters = [tf.Variable([1.0, 2.0]), tf.Variable([3.0, 4.0])]
      updates = [tf.constant([5.0, 5.0]), tf.constant([3.0, 3.0])]
      learning_rate = tf.Variable(3.0)
      optimizer = self.make_optimizer(learning_rate=learning_rate)
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-14.0, -13.0], [-6.0, -5.0]],
          [x.numpy() for x in parameters],
      )
      learning_rate.assign_sub(1.0)
      self.assertEqual(2.0, optimizer.learning_rate.numpy())
      optimizer.apply(updates, parameters)
      self.assertAllClose(
          [[-24.0, -23.0], [-12.0, -11.0]],
          [x.numpy() for x in parameters],
      )
  
file_path: sonnet/sonnet/src/optimizers/sgd_test.py
imports: from sonnet.src.optimizers import optimizer_tests
  from sonnet.src.optimizers import sgd
  import tensorflow
label_desc: Use image node_id 4 for calling the SGDTest obj's underlying member method code with example usage: obj.testVariableLearningRate() without return types