python - 在tensorflow中寻找gen_nn_ops的源代码

标签 python tensorflow deep-learning deconvolution

我是 tensorflow 深度学习的新手,对 tensorflow 中的反卷积(卷积转置)操作很感兴趣。我需要看一下操作反卷积的源代码。功能是我猜conv2d_transpose() in nn_ops.py .

但是,在函数中它调用另一个名为 gen_nn_ops.conv2d_backprop_input() 的函数。我需要看看这个函数里面有什么,但我无法在存储库中找到它。任何帮助将不胜感激。

最佳答案

你找不到这个来源,因为这个来源是 bazel 自动生成的。如果你从源代码构建,你会在 bazel-genfiles 中看到这个文件。它也存在于您的本地发行版中,您可以使用 inspect 模块找到它。该文件包含对底层 C++ 实现的自动生成的 Python 包装器,因此它基本上由一堆 1 行函数组成。找到这种生成的 Python 操作的底层 C++ 实现的捷径是将蛇形大小写转换为驼形大小写,即 conv2d_backprop_input -> Conv2dBackpropInput

# figure out where gen_nn_ops is
print(tf.nn.conv2d_transpose.__globals__['gen_nn_ops'])

from tensorflow.python.ops import gen_nn_ops
import inspect
inspect.getsourcefile('gen_nn_ops.conv2d_backprop_input')
'/Users/yaroslav/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/gen_nn_ops.py'

如果你想知道这个文件是如何产生的,你可以在 BUILD 文件中追踪 bazel 依赖。它从 tensorflow 源树中找到生成它的 Bazel 目标:

fullname=$(bazel query tensorflow/python/ops/gen_nn_ops.py)
bazel query "attr('srcs', $fullname, ${fullname//:*/}:*)"

//tensorflow/python:nn_ops_gen

所以现在转到 tensorflow/python 内的 BUILD 文件,您会看到这是一个类型为 tf_gen_op_wrapper_private_py 的目标,它被定义为 here并从 tensorflow/tensorflow.bzl 调用 gen_op_wrapper_py 看起来像这样

def tf_gen_op_wrapper_py(name, out=None, hidden=None, visibility=None, deps=[],
....
      native.cc_binary(
      name = tool_name,

这个 native.cc_binary 构造是一种让 Bazel 目标表示执行任意命令的方法。在这种情况下,它使用一些参数调用 tool_name。再执行几个步骤,您会发现这里的“工具”是从 framework/python_op_gen_main.cc 编译而来的。

造成这种复杂情况的原因是 TensorFlow 被设计为与语言无关。因此,在理想世界中,您将在 ops.pbtxt 中描述每个操作,然后每个操作将使用 REGISTER_KERNEL_BUILDER 为每种硬件类型提供一个实现,因此所有实现都将在 C++/CUDA/Assembly 中完成,并自动可供所有语言前端使用。每种语言都会有一个等效的翻译器操作,例如“python_op_gen_main”,并且所有客户端库代码都将自动生成。然而,由于 Python 如此占主导地位,因此在 Python 方面存在添加功能的压力。所以现在有两种操作——在像 gen_nn_ops.py 这样的文件中可以看到纯 TensorFlow 操作,以及像 nn_ops.py 这样的文件中的纯 Python 操作,它们通常包装操作自动生成的文件 gen_nn_ops.py 但添加了额外的功能/语法糖。此外,最初所有名称都是驼峰式大小写,但决定面向公众的版本应该与更常见的 Python 语法兼容 PEP,因此这是相同操作的 C++/Python 接口(interface)之间驼峰式/蛇形大小写不匹配的原因

关于python - 在tensorflow中寻找gen_nn_ops的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147734/

相关文章:

python - 如何使用 python 以编程方式创建 Google 表单?是否可以通过应用程序脚本和 python 接口(interface)或类似的东西来做到这一点?

python - 尝试使用 openpyxl 打开工作簿时出现 TypeError

python - Keras 预测每次返回相同的结果

r - 使用 Keras 连接到多个层

python - Mutual_info_regression 和 Mutual_info_classif 有什么用?

Python浮点到十进制转换

python - 相当于 pandas.DataFrame.div 但就地而不是复制?

tensorflow - 在 Tensorflow 中使用重叠数据进行训练?

tensorflow - 为什么要在 Keras 上使用纯 TensorFlow?

machine-learning - 在caffe中记录权重和偏差