TensorFlow 从入门到精通(七):TensorFlow 运行原理

原创 2016年06月08日 12:47:39

通过几个例程,我们逐渐对 TensorFlow 建立了感性认识。本文将进一步从内在原理进行深入理解,进而为阅读源码打好基础。


1. 图(Graph)

TensorFlow 计算被抽象为包括若干节点的有向图。如下图所示例子:

对应的 TensorFlow Python 代码如下:

import tensorflow as tf
b = tf.Variable(tf.zeros([100]))                   # 100-d vector, init to zeroes
W = tf.Variable(tf.random_uniform([784,100],-1,1)) # 784x100 matrix w/rnd vals
x = tf.placeholder(name="x")
relu = tf.nn.relu(tf.matmul(W, x) + b)
C = [...]
s = tf.Session()
for step in xrange(0, 10):
  input = ...construct 100-D input array ...
  result = s.run(C, feed_dict={x: input})
  print step, result

在 TensorFlow 有向图中,每个节点表示运算符,可以有零个或多个输入,零个或多个输出。

在有向图的普通棱边(从一个节点输出到另一个节点输入)流动的数值称为张量(Tensor),本质为任意维度数组。张量的元素数据类型可以显式指定或在构建有向图时推断得到。

有关图及张量的实现源码均位于 tensorflow/tensorflow/python/framework/ops.py,我们后面会细讲。


2. 运算符(Operations)与核函数(Kernels)

TensorFlow 支持多种常用运算符,如矩阵乘、加法。

核函数是运算符的特定实现,可以运行在特定类型设备上(如 CPU 或 GPU )。

TensorFlow 通过注册机制来确定支持的运算符集合和核函数,方便进一步扩展。

表1 展示了 TensorFlow 内置的一些运算符种类:


运算符相关的代码位于:tensorflow/tensorflow/python/ops/ 目录下。以数学运算符为例,代码为上述目录下的 math_ops.py,间接地调用了 gen_math_ops.py,又调用了 tensorflow/tensorflow/core/kernels/ 下面的核函数实现。这些我们会在后面细讲。


3. 会话(Sessions)

客户端程序通过创建会话同 TensorFlow 系统交互。

为了创建一个计算图,会话接口支持扩展方法来补充当前图。

Run 接口允许指定将某个张量 Tensor 作为入口参数馈入计算图,得到一组计算输出。

会话相关源码位于 tensorflow/tensorflow/python/client/session.py,具体我们会在后面细讲。



4. 变量(Variables)

大多数计算中,有向图会执行多次。

大多数张量生命周期都不会超过有向图的一次执行。

变量是特殊运算,返回一个持续可更改的张量句柄,生命周期横亘有向图的多次执行。

变量句柄可以传递给大量特殊操作,如 Assign(=),AssignAdd(+=)。

对于机器学习应用,模型权值一般都会存放在变量中,更新操作会作为训练有向图 Run 的一部分。

变量相关源码位于 tensorflow/tensorflow/python/ops/variables.py,是一类特殊的运算。后面我们会细讲。

版权声明:本文为卜居原创文章,未经博主允许不得转载。卜居博客地址:http://blog.csdn.net/kkk584520

TensorFlow使用next_batch()读取/tensorflow.python.framework.errors_impl.InvalidArgumentError: Expect 3 fi

分批次读取csv文件,如图: 源代码: import tensorflow as tf import numpy as np def readMyFileFormat(fileNameQueue...
  • gsww404
  • gsww404
  • 2017年09月25日 15:06
  • 2029

TensorFlow Python API解析:图的核心数据结构

1. Graph类的要点:(1) TensorFlow中的计算,表示为一个数据流图,简称“图”;(2) 一个Graph实例就是一个图,由一组Operation对象和Tensor对象构成:每个Opera...
  • deepknower
  • deepknower
  • 2016年12月23日 00:16
  • 2214

TensorFlow 从入门到精通(六):tensorflow.nn 详解

看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块。我们通过源码来一探究竟。# Copyright 2015 Google Inc. All Rights Res...
  • kkk584520
  • kkk584520
  • 2016年05月23日 14:30
  • 50501

tensorflow bug: tensorflow.python.framework.errors_impl.NotFoundError

____tz_zs 报错代码: 我是持久化存储,创建文件的代码 tf.gfile.GFile("/path/to/model/combined_model.pb", "wb") 运行失败 ...
  • tz_zs
  • tz_zs
  • 2017年08月02日 06:52
  • 3559

TensorFlow官方文档学习|TensorFlow运作方式入门

TensorFlow官方文档学习|TensorFlow运作方式入门   目的 data_sets.train 55000个图像和标签(labels),作为主要训练集。 data_...
  • darlingwood2013
  • darlingwood2013
  • 2017年03月12日 19:53
  • 821

tensorflow架构

TensorFlow,以下简称TF,是Google去年发布的机器学习平台,发布以后由于其速度快,扩展性好,推广速度还是蛮快的。江湖上流传着Google的大战略,Android占领了移动端,TF占领神经...
  • xinzhangyanxiang
  • xinzhangyanxiang
  • 2016年06月12日 12:49
  • 38495

#####tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构 ***********######

Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor)基于张量的各种操作计算图(Computation Graph)自动微分(A...
  • u010159842
  • u010159842
  • 2017年01月23日 14:32
  • 8166

tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构

Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor) 基于张量的各种操作 计算图(Computation G...
  • sinat_26917383
  • sinat_26917383
  • 2017年01月22日 11:57
  • 6610

TensorFlow中的一个重要ops---MatMul的实现(二)

上面一篇文章我们主要介绍了MatMul这个op的正向计算的实现,我们知道模型的最后一步是计算优化模型的参数,而一般采用的方法是梯度下降法,所以每个op节点不仅要实现一个正向的计算节点,还要实现一个方向...
  • luozirong
  • luozirong
  • 2017年04月10日 20:22
  • 1036

TensorFlow结构分析及自定义Op

$(tensorflow)/tensorflow/core/ops/* 调用REGISTER_OP $(tensorflow)/tensorflow/core/kernels/* 继承OpKerne...
  • wqzghost
  • wqzghost
  • 2016年11月19日 22:03
  • 6663
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TensorFlow 从入门到精通(七):TensorFlow 运行原理
举报原因:
原因补充:

(最多只允许输入30个字)