python - 梯度下降的代码在哪里?

标签 python tensorflow machine-learning gradient-descent

用 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 中,搜索了那个……不在那里。整个源码树中只有3次出现,都是uses,不是definitions。

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 代码库的任何人都可以指出相关源代码的位置吗?

最佳答案

实现进一步转到 native 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 实现是 here (core/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();
  }
};

关于python - 梯度下降的代码在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47178371/

相关文章:

python - 如何将 MATLAB 集成到 TensorFlow?

machine-learning - 朴素贝叶斯分类中的未知词

Python Mechanize 提交时的响应

python - 如何在 Keras 中仅获取序列模型的最后一个输出?

python - 用于过滤空类别的上下文处理器

tensorflow - 使用存储在Google Cloud中的Training TFRecords

python - 如何使用 sklearn 将数据分成 3 个或更多部分

math - 需要梯度下降数学实现解释。

python - 在python中使用正则表达式提取括号内的单词

python - ANSI 图形代码和 Python