由于项目的原因,最近在学习TensorFlow的源码。刚面对TensorFlow源码时,遇到各种基本概念,千头万绪,无处着手。于是思虑许久,觉得应该先自底向上,从具体的操作开始,理清基本的概念和数据结构。有了一定的积累之后,再自顶向下,提纲挈领,通其概要。这样或许才是最高效的学习方法。
循着这样的思路,我选择了TensorFlow中最简单的一个操作,即ConstantOp作为切入点。顾名思义,ConstantOp的功能是创建一个常量Tensor。这或许是我们每一个学习使用TensorFlow的人,第一个试验的操作了。
它定义在tensorflow/core/kernels/constant_op.h文件中。这里需要注意的是,kernels目录是TensorFlow源码中最重要的目录。所有关于Tensor的具体操作,都定义在该目录下。kernel这个词,如果熟悉OpenCL的人一定不会陌生。在OpenCL中,kernel函数定义了计算设备(如GPU)上的具体操作。CPU通过调用kernel方法,来实现对计算设备的利用。TensorFlow中也借用了kernel的这一概念。
ConstantOp类的声明如下:
class ConstantOp : public OpKernel {
public:
explicit ConstantOp(OpKernelConstruction* ctx);
void Compute(OpKernelContext* ctx) override;
bool IsExpensive() override { return false; }
~ConstantOp() override;
private:
Tensor tensor_;
T