code: def _apply_norm_ratio(
      self, norm_ratio, model, params, learning_rate, scope, ONE
  ):
      for param in params:
          param_grad = model.param_to_grad[param]
          nlr = model.net.Negative(
              [learning_rate],
              "negative_learning_rate",
          )
          with core.NameScope(scope):
              update_coeff = model.net.Mul(
                  [nlr, norm_ratio],
                  "update_coeff",
                  broadcast=1,
              )
          if isinstance(param_grad, core.GradientSlice):
              param_grad_values = param_grad.values
  
              model.net.ScatterWeightedSum(
                  [
                      param,
                      ONE,
                      param_grad.indices,
                      param_grad_values,
                      update_coeff,
                  ],
                  param,
              )
          else:
              model.net.WeightedSum(
                  [
                      param,
                      ONE,
                      param_grad,
                      update_coeff,
                  ],
                  param,
              )
  
imports: import argparse
  import collections
  import logging
  import math
  import numpy
  import random
  import time
  import sys
  import os
  import caffe2.proto.caffe2_pb2
  from caffe2.python import core, workspace, data_parallel_model
  import caffe2.python.models.seq2seq.seq2seq_util
  from caffe2.python.models.seq2seq.seq2seq_model_helper import Seq2SeqModelHelper
label_desc: Use image node_id 7 for calling the Seq2SeqModelCaffe2 obj's underlying member method code with example usage: obj._apply_norm_ratio(norm_ratio, model, params, learning_rate, scope, ONE) without return types