Tensorflow 编写自定义优化器问题

Tensorflow 编写自定义优化器问题,tensorflow,Tensorflow,如果这些是基本问题,我会事先道歉——我已经做了一些调查,找不到直截了当的答案。如果有任何可以帮助的资源链接,那也太好了 我目前正在看下面一段实现optimizer.optimizer的类的代码。我无法理解以下内容: def _create_slots(self, var_list): # Create slots for the first and second moments. for v in var_list: self._zeros_slot(v, "m"

如果这些是基本问题,我会事先道歉——我已经做了一些调查,找不到直截了当的答案。如果有任何可以帮助的资源链接,那也太好了

我目前正在看下面一段实现optimizer.optimizer的类的代码。我无法理解以下内容:

def _create_slots(self, var_list):
    # Create slots for the first and second moments.
    for v in var_list:
        self._zeros_slot(v, "m", self._name)

def _apply_dense(self, grad, var):
    lr_t = math_ops.cast(self._lr_t, var.dtype.base_dtype)
    beta_t = math_ops.cast(self._beta_t, var.dtype.base_dtype)
    alpha_t = math_ops.cast(self._alpha_t, var.dtype.base_dtype)
    eps = 1e-7 #cap for moving average

    m = self.get_slot(var, "m")
    m_t = m.assign(tf.maximum(beta_t * m + eps, tf.abs(grad)))

    var_update = state_ops.assign_sub(var, lr_t*grad*(1.0+alpha_t*tf.sign(grad)*tf.sign(m_t) ) )
    #Create an op that groups multiple operations
    #When this op finishes, all ops in input have finished
    return control_flow_ops.group(*[var_update, m_t])
  • 在创建插槽中,是否为每个权重分配变量“m”?如果我需要更多的变量,那么我会在for循环中有另一行,比如self.\u zero.\u插槽(v,“另一个变量”,self.\u名称)等等

  • 输入梯度和var是否适用于每个权重的梯度和每个权重的变量?如果我需要其他梯度,例如,如果我想基于整个梯度矩阵进行全局更新,该怎么办

  • 如何使用新权重更新m?似乎每次迭代都会乘以beta

  • 在使用var_update的过程中,似乎var正在使用权重更新进行更新,但我也可以从var中获取变量