在“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等)。任何帮助将非常感激!
答案 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.