用于从 C++ 自动生成的 python 模块的 TensorFlow 源

Posted

技术标签:

【中文标题】用于从 C++ 自动生成的 python 模块的 TensorFlow 源【英文标题】:Tensorflow source for autogenerated python modules from C++ 【发布时间】:2018-03-30 21:17:25 【问题描述】:

我经常想查看一些 tensorflow 模块的源代码。通常,API 的很大一部分是用原生 python 编写的,相关文件在 github 上很容易找到。但是,有一些重要的部分是我用 C++ 编写的,我找不到它们的源代码。例如,根据 TensorFlow 官方文档,大部分数学运算都定义在 tensorflow/python/ops/gen_math_ops.py 中。但是,GitHub 上没有这样的文件。我本地安装的 TF 有这个文件,但是在 GitHub 上查看源代码要容易得多。我还想了解我应该在哪里搜索指定如何生成 python 文件的规则。如果这是一个愚蠢的问题,我很抱歉,但我不熟悉 bazel。

【问题讨论】:

相信你可以在core找到gen文件的C++源码。所以对于tensorflow/python/ops/gen_math_ops.py,您可以在tensorflow/tensorflow/core/ops/math_ops.cc 找到C++ 源代码。我不确定生成文件的规则,所以我将其添加为评论。 【参考方案1】:

我还想了解我应该在哪里搜索指定如何生成 python 文件的规则。

为此使用bazel query

如果您想知道哪个规则生成文件(例如$PROJECT/some/dir/file.py),请从项目根目录运行此命令:

bazel query --output=build some/dir/file.py

例如,如果我想找出哪个规则生成了一个特定的 jar 文件,bazel query 会打印以下内容:

$ bazel query --output=build examples/java-native/src/test/java/com/example/myproject/hello.jar
# /Users/foo/bazel/examples/java-native/src/test/java/com/example/myproject/BUILD:1:1
java_test(
  name = "hello",
  deps = ["//examples/java-native/src/main/java/com/example/myproject:hello-lib", "//third_party:junit4"],
  srcs = ["//examples/java-native/src/test/java/com/example/myproject:TestHello.java"],
  test_class = "com.example.myproject.TestHello",
)

查看Query how-to documentation page 了解更多bazel query 提示。

【讨论】:

以上是关于用于从 C++ 自动生成的 python 模块的 TensorFlow 源的主要内容,如果未能解决你的问题,请参考以下文章

Python ImportError - 未定义符号 - 用于自定义 C++ 模块

Python 错误:在 SWIG 生成的 C++ 模板代码模块中未定义构造函数

进阶第十五课 Python模块之Numpy

有没有办法使用 SWIG C++ 创建一个 python 模块,可以在 Python2 和 Python3 中导入

selenium-查看selenium API

python量化分析相关模块