TensorFlow:RMSprop的实际实现在哪里?

时间:2017-08-30 07:18:39

标签: python-3.x tensorflow gradient-descent

在“rmsprop.py”(在TensorFlow中)中,调用方法 apply_rms_prop 。该方法在“gen_training_ops.py”中定义。在这个方法的定义中,有一个描述它应该做什么的注释:

ms <- rho * ms_{t-1} + (1-rho) * grad * grad
mom <- momentum * mom_{t-1} + lr * grad / sqrt(ms + epsilon)
var <- var - mom

但我似乎无法找到上面伪代码的实际python实现的位置。我的猜测是它是在cpython中实现的,因为我能够找到文件“__pycache __ / rmsprop.cpython-36.pyc”。但同样,执行上面的伪代码的cpython实现在哪里?

我的目标是实现自己的渐变更新方法,因此我需要看一些具体的实现示例(例如rmsprop,adam等)。任何帮助将非常感激!

2 个答案:

答案 0 :(得分:3)

您可以在tensorflow/core/kernels下找到这些实现。 CPU版本在training_ops.cc中,GPU(CUDA)版本在training_ops_gpu.cu.cc中(查找模板结构ApplyRMSProp)。其他优化器更新规则实现也可以在这些文件中找到。

认为 CPython代码是使用文件末尾的内核注册宏自动生成的,将不同的实现分组在一个操作名称下(从驼峰案例转换为Python中的蛇案例)您可以独立使用该设备。

答案 1 :(得分:1)

您可以从Optimizer类实现自己的优化器。您必须至少实现方法_apply_dense_apply_sparse中的一种。

使用纯已经可用的tensorflow操作完成adamax优化器的实现。

class AdamaxOptimizer(optimizer.Optimizer):
..
   you can create slot variables implementing slot fucntion
   def _create_slots(self, var_list):
       ...
   def _apply_dense(self, grad, var):
        implement your logic for gradient updates here.