理解Tensorflow源码

注:为了节省时间,没有对照源码写此文章,所以文中所提及的文件名和函数名不一定完全准确,请见谅。另,我看的主要是Tensorflow 1.3版本的代码。

  Tensorflow源码以c_api.cc为界,将代码分为client和内部c++实现。使用swig工具生成python的接口,面向python的是pywrap_tensorflow.py文件,该文件中的函数调用pywrap_tensorflow_internal.py,向内封装c++函数的文件是pywrap_tensorflow_internal.cc文件,编译后该cc文件生成_pywrap_tensorflow_internal.so。这些文件封装的函数主要是一些关于会话(session)、图(graph)等的函数,可以在pywrap_tensorflow_internal.cc中的SwigMathods[]数组找到这些函数对应的函数。

Tesnsorflow的程序主要是在构建一个图,每添加一个函数运算,就在图中增加一个节点。而这些函数的最终真正的执行是通过session的run函数启动的。因此,如果追踪python中的函数,会发现根本没找到对应的c++函数。这是因为python中添加一个函数,只是在图中增加一个节点,这个节点只是包含了函数的名称、输入、输出、类型等信息,并没有包含执行过程。也就是说具体的运算,不需要通过c++向外提供具体的函数。例如,追踪matmul函数,会发现它会调用过程大致是这样的match_ops.py-->gen_match_ops.py,在gen_match_ops.py中以函数名字符串以及其他信息调用add_ops函数,而该函数最终会调用ops.py中g.create_node函数,在图中创建一个节点。在python代码文件pywrap_tensorflow_internal.py中,维护了一个函数信息的列表,查看该列表可以看到其支持的操作都有哪些。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值