TensorFlow:Python函数的可用C ++等价物

时间:2017-01-24 00:54:20

标签: c++ tensorflow

我想知道如何找到Python中广泛使用的TensorFlow方法的C ++等价物。例如,哪里可以找到tf.matmul()的等价物?是否可以使用?

我正在阅读main.cc示例中的label_image,我注意到它使用Sub()Div()等函数,我在C ++ API中找不到它们的文档文档。我想知道这些功能来自哪里。

感谢。

更新

通过新TensorFlow r1.0 C++ API的良好文档解决了这种困惑。

1 个答案:

答案 0 :(得分:3)

更新:对于TensorFlow的1.0之前的版本,答案主要是有意义的。 MBA指出TF团队直接提供的一些新解释(官方文档),并且围绕操作进行了很好的重构: - )

Python API将执行委托给许多操作的C ++实现。

tensorflow/core/ops下的源代码包含内核和操作。它们是处理通过不同API调用的命令的实际操作。

内核和操作遵循一种模式。 REGISTER_OP宏"附加"一个句柄(一个字符串)的C ++函数实现,它由一个API在运行时调用。这种架构有其优点和缺点 - 超出范围: - )

例如tf.matmul,可以在repositorytensorflow/core/ops/math_ops.cc中轻松找到代码。典型的模式如下:

REGISTER_OP("MatMul")
    .Input("a: T")
    .Input("b: T")
    .Output("product: T")
    .Attr("transpose_a: bool = false")
    .Attr("transpose_b: bool = false")
    .Attr("T: {half, float, double, int32, complex64, complex128}")
    .SetShapeFn(shape_inference::MatMulShape)
.Doc("[Edited: some doc string.]");

执行tf.matmul的实际代码运行在函数shape_inference::MatMulShape中("仿函数"即C ++函数)。 Wrappers(例如Python API)调用MatMul句柄来执行代码。