code: def create_slots(self, var):
      
      params = self.params
      shape = var.get_shape().as_list()
  
      if not hasattr(params, "slots"):
        params.slots = defaultdict(dict)
  
      name = var.op.name
      slots = params.slots[name]
  
      if params.factored_second_moment_accumulator and len(shape) == 2:
        slots["adam_vr"] = tf.get_variable(
            name + "_adam_vr", [shape[0], 1],
            trainable=False,
            initializer=tf.zeros_initializer())
        slots["adam_vc"] = tf.get_variable(
            name + "_adam_vc", [1, shape[1]],
            trainable=False,
            initializer=tf.zeros_initializer())
      else:
        slots["adam_v"] = tf.get_variable(
            name + "_adam_v",
            shape,
            trainable=False,
            initializer=tf.zeros_initializer())
      if params.beta1 != 0.0:
        slots["adam_m"] = tf.get_variable(
            name + "_adam_m",
            shape,
            trainable=False,
            initializer=tf.zeros_initializer())
docs: Create the factorized Adam accumulators for diet variables.