梯度下降的代码在哪里?

问题描述 投票:5回答:1

使用TensorFlow运行一些实验,想要查看一些函数的实现,只是为了确切地了解一些事情是如何完成的,从tf.train.GradientDescentOptimizer的简单情况开始。从github下载了完整源代码的zip,在源代码树上运行了一些搜索,得到:

C:\tensorflow-master\tensorflow\python\training\gradient_descent.py

class GradientDescentOptimizer(optimizer.Optimizer):

  def _apply_dense(self, grad, var):
    return training_ops.apply_gradient_descent(

好吧,假设实际的代码是在apply_gradient_descent,搜索那个......不是那里。整个源树中只出现三次,所有这些都是使用,而不是定义。

怎么样training_ops?确实存在具有暗示名称的源文件:

C:\tensorflow-master\tensorflow\python\training\training_ops.py

from tensorflow.python.training import gen_training_ops
# go/tf-wildcard-import
# pylint: disable=wildcard-import
from tensorflow.python.training.gen_training_ops import *
# pylint: enable=wildcard-import

...以上是该文件的全部内容。嗯。

我找到了这个文件:

C:\tensorflow-master\tensorflow\python\BUILD

tf_gen_op_wrapper_private_py(
    name = "training_ops_gen",
    out = "training/gen_training_ops.py",
)

这似乎证实了这样和其他文件是在构建过程中生成的目标代码 - 但它们是从哪里生成的源代码?

所以这就是我放弃并寻求帮助的地方。任何熟悉TensorFlow代码库的人都能指出相关源代码的位置吗?

python tensorflow machine-learning artificial-intelligence gradient-descent
1个回答
8
投票

实现进一步转向本机c ++代码。这是ApplyGradientDescent GPU实现(core/kernels/training_ops_gpu.cu.cc):

template <typename T>
struct ApplyGradientDescent<GPUDevice, T> {
  void operator()(const GPUDevice& d, typename TTypes<T>::Flat var,
                  typename TTypes<T>::ConstScalar lr,
                  typename TTypes<T>::ConstFlat grad) {
    Eigen::array<typename TTypes<T>::Tensor::Index, 1> bcast;
    bcast[0] = grad.dimension(0);
    Eigen::Sizes<1> single;
    var.device(d) -= lr.reshape(single).broadcast(bcast) * grad;
  }
};

CPU实现是herecore/kernels/training_ops.cc):

template <typename T>
struct ApplyGradientDescent<CPUDevice, T> {
  void operator()(const CPUDevice& d, typename TTypes<T>::Flat var,
                  typename TTypes<T>::ConstScalar lr,
                  typename TTypes<T>::ConstFlat grad) {
    var.device(d) -= grad * lr();
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.