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

通过几个例程,我们逐渐对 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,是一类特殊的运算。后面我们会细讲。

时间: 2024-08-10 17:17:25

TensorFlow 从入门到精通(七):TensorFlow 运行原理的相关文章

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

看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块.我们通过源码来一探究竟. # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. #

TensorFlow 从入门到精通(八):TensorFlow tf.nn.conv2d 一路追查

读者可能还记得本系列博客(二)和(六)中 tf.nn 模块,其中最关心的是 conv2d 这个函数. 首先将博客(二) MNIST 例程中 convolutional.py 关键源码列出: def model(data, train=False): """The Model definition.""" # 2D convolution, with 'SAME' padding (i.e. the output feature map has #

SaltStack 入门到精通 - 第七篇: Targeting

什么是Targeting? Targeting minions 是指那些minion会作为运行命令或是执行状态的目标.这些目标可以是一个主机名,系统信息,定义的分组,甚至是自定义的绑定的对象. 例如命令  salt web1 apache.signal restart 可以重启ID 为web1的minion的apache.当然也可以在top文件中使用web1来作为目标匹配的内容: base:   'web1':     - webserver Targing 有哪些匹配方式? Minion Id

TensorFlowSharp入门使用C#编写TensorFlow人工智能应用

TensorFlowSharp入门使用C#编写TensorFlow人工智能应用学习. TensorFlow简单介绍 TensorFlow 是谷歌的第二代机器学习系统,按照谷歌所说,在某些基准测试中,TensorFlow的表现比第一代的DistBelief快了2倍. TensorFlow 内建深度学习的扩展支持,任何能够用计算流图形来表达的计算,都可以使用TensorFlow.任何基于梯度的机器学习算法都能够受益于TensorFlow的自动分化(auto-differentiation).通过灵活

Tensorflow快速入门2--实现手写数字识别

Tensorflow快速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow(仅使用cpu版) Tensorflow安装见: http://blog.csdn.net/yhhyhhyhhyhh/article/details/54429034 或者: http://www.tensorfly.cn/tfdoc/get_started/os_setup.html 本文将利用Tensorflow以softmax回归和卷积神经网络两种模型简单测试MNIST数据集,快

TensorFlow快速入门与实战

课程目录:01.课程内容综述02.第一章内容概述03.TensorFlow产生的历史必然性04.TensorFlow与JeffDean的那些事05.TensorFlow的应用场景06.TensorFlow的落地应用07.TensorFlow的发展现状08.第二章内容概述09.搭建你的TensorFlow开发环境10.HelloTensorFlow11.在交互环境中使用TensorFlow12.在容器中使用TensorFlow13.第三章内容概述14.TensorFlow模块与架构介绍15.Ten

火云开发课堂 - 《Shader从入门到精通》系列 第七节:在Shader中实现纹理混合

<Shader从入门到精通>系列在线课程 第七节:在Shader中实现纹理混合 视频地址:http://edu.csdn.net/course/detail/1441/22669?auto_start=1 交流论坛:http://www.firestonegames.com/bbs/forum.php 工程下载地址:请成为正式学员获取工程 课程截图: 版权声明:本文为博主原创文章,未经博主允许不得转载.

tensorflow运行原理分析(源码)

tensorflow运行原理分析(源码)  https://pan.baidu.com/s/1GJzQg0QgS93rfsqtIMURSA 原文地址:https://www.cnblogs.com/liuzhongfeng/p/8778422.html

分享《深度学习之TensorFlow:入门、原理与进阶实战》PDF+源代码

下载:https://pan.baidu.com/s/1zI-pblJ5dEwjGVe-QQP9hQ 更多资料:http://blog.51cto.com/3215120 <深度学习之TensorFlow:入门.原理与进阶实战>,李金洪 著.中文PDF,939页,带书签目录,文字可以复制粘贴.配套源代码. 如图: 原文地址:http://blog.51cto.com/14050756/2315854