我一直想学习TensorFlow,因此我想阅读它的源代码,但在开始时遇到了困难。例如:
我无法找到函数的更深层次。
函数Shape
在哪里计算的?
回答:
你展示的代码片段是一个自动生成的代码片段,它向图中添加了一个"Shape"
操作。在_op_def_lib.apply_op()
的参数中的字符串"Shape"
决定了节点的操作类型。这些标准操作类型是在C++源代码中注册的,位于TensorFlow源代码的tensorflow/core/ops/
目录中。特别是,"Shape"
操作是在tensorflow/core/ops/array_ops.cc
中注册的。这些注册用于定义每个操作的输入类型、属性和输出类型,并且Python包装器是从这些注册中生成的。
当你首次运行包含该节点的子图时(即在调用tf.Session.run()
时),TensorFlow会查找实现该操作的适当内核,该内核在特定设备上运行。(例如,操作的CPU和GPU实现通常有不同的内核。)标准内核实现是在C++源代码中注册的,位于TensorFlow源代码的tensorflow/core/kernels/
目录中。特别是,"Shape"
内核是在tensorflow/core/kernels/shape_ops.cc
中注册的。内核注册命名了一个实现内核的类,该类必须是tensorflow::OpKernel
的子类,在本例中是tensorflow::ShapeOp
类。当子图首次运行时调用构造函数,每次操作运行时调用Compute()
方法。