编写自定义优化器问题

时间:2019-03-01 02:52:51

标签: 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", 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])
  1. 在创建广告位中,是否为每个权重分配变量“ m”?如果我需要更多的变量,那么for循环中是否还会有另一行像self._zero_slots(v,“另一个变量”,self._name)等?

  2. _apply_dense中的输入grad和var是单位重量的梯度和单位重量的变量吗?如果我需要其他渐变,例如如果我想基于整个梯度矩阵进行全局更新?

  3. 如何用新的权重更新m?似乎在每次迭代中,它只会乘以beta。

  4. 在var_update中,似乎var正在使用权重更新进行更新,但我也可以从var中获取变量?

0 个答案:

没有答案