TensorFlow实战(一)- TensorFlow基础

一,TensorFlow基础架构和主要技术特性

1

1
2

二,TensorFlow编程模型

核心概念

1,计算图

计算图描述了数据的计算流程,也负责维护和更新状态,用户可以对计算图的分支进行条件控制和循环控制。

  • 节点(node):每个节点描述了一个运算操作(operation),可以有任意多输入和输出。
  • 边(edge):流动着数据,边中流动的数据成为张量(tensor)。
  • 特殊的边:这种边没有数据流动,称为依赖控制,作用是让它的起始节点执行完之后再执行目标节点,用户可以使用这样的边进行灵活的条件控制。

如下图所示:

1

2,运算操作

运算操作可以有自己的属,但所有属性必须被预先设置,或者在创建计算图时被推断出来。

运算核是一个运算操作在某个具体硬件(CPU或GPU)上的实现。

TensorFlow内建的运算操作主要如下:

1
2

3,运行过程

Session是用户使用TensorFlow时的交互式接口,主要是通过Session的Run方法来执行计算图,过程如下:

  • 用户给出需要计算的节点,同时提供输入数据,TensorFlow就会自动寻找需要计算的节点并按照顺序执行它们。
  • 对绝大多事用户来说,他们只需创建一次计算图,然后反复执行整个计算图或者其中的部分子图。

在大多数的运算中,计算图会被反复执行多次,而数据也就是tensor并不会被持续保留,只是在计算图中过一遍。但Variable这一特殊的运算操作,可以将过程中的tensor保存,也可进行更新。

实现原理

1,模式

TensorFlow有一个重要的组件client,即客户端,它可以通过Session的接口与master及多个worker相连。其中每个worker可以和多个硬件设备(如CPU和GPU)相连,并负责管理这些硬件。而master则负责指导所有的worker按流程执行计算图。

1

2,计算顺序

  • 单个硬件设备时:计算图会按照依赖关系被顺序执行。当一个节点的所有上游依赖都被执行完时,这个节点就会被加入到ready queue以等待执行。实际上这就是标准的计算拓扑序的方式。
  • 多个硬件设备时:稍微有点复杂,难点有二:(1)每个节点该让什么硬件设备执行。(2)如何管理节点间的数据通信。

3,自动求导原理

求解梯度的过程本质上是通过在计算图扩展节点的方式实现的,只不顾求梯度的节点对用户是透明的。求解梯度的原理有:

  • 链式法则
  • 反向传播算法

如下图所示:

1

4,其他功能

  • TensorFlow支持单独执行子图,用户可以选择计算图中的任意子图,并沿着某些边输入数据,同时从另一边获取输出结果。TensorFlow用节点名加port的形式指定数据。输入数据的节点会连接一个feed node,而输出数据的节点会连接一个fetch node。
  • 队列也是TensorFlow任务调度的一个重要特性,它可以让计算图的不同节点异步地执行。
  • 容器是TensorFlow中一个特殊的管理长期变量的机制,如Variable对象就是存储在容器中。

性能优化

1,TensorFlow同时支持几种高度优化的第三方计算库

线性代数计算库:

  • Eigen

矩阵乘法计算库:

  • BLAS
  • cuBLAS(CUDA BLAS)

深度学习计算库:

  • cuda-convnet
  • cuDNN

2,TensorFlow三种加速神经网络训练的并行计算模式

  • 数据并行:通过将一个mini-batch的数据放在不同设备上计算,实现梯度计算的并行化。

    1

  • 模型并行:将计算图的不同部分放在不同的设备上运算,可以实现简单的模型并行,其目标在于减少每一轮训练迭代的时间,不同于数据并行同时进行多份数据的训练。
    2

  • 流水线并行:和异步的数据并行很像,只不过是在同一硬件设备上实现并行。

    3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值