第五章 深度学习
四、TensorFlow
1. Tensorflow 简介
1.1 什么是 Tensorflow
TensorFlow 由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护的开源深度学习平台,是目前人工智能领域主流的开发平台,在全世界有着广泛的用户群体。
1.2 Tensorflow 的特点
优秀的构架设计,通过“张量流”进行数据传递和计算,用户可以很容易地、可视化地看到张量流动的每一个环节。
可轻松地在 CPU/GPU 上部署,进行分布式计算,为大数据分析提供计算能力的支撑。
跨平台性好,灵活性强。TensorFlow 不仅可在 Linux、Mac 和 Windows 系统中运行,甚至还可在移动终端下工作。
1.3 Tensorflow 发展历史
2011 年,Google 公司开发了它的第一代分布式机器学习系统 DistBelief。
著名计算机科学家杰夫·迪恩(Jeff Dean)和深度学习专家吴恩达(Andrew Y.Ng)都是这个项目的核心成员。
2015 年 11 月,Google 将它的升级版实现正式开源,协议遵循 Apache 2.0 并更名为TensorFlow。
目前,TensorFlow 最新版为 2.X,此处使用 1.14.0。
1.4 Tensorflow 安装
在线安装
- 安装纯净包:pip install tensorflow
- 安装 GPU 版本:pip install tf-nightly-gpu
离线安装
- 下载离线包:https://pypi.org/project/tensorflow/#files执行安装
修改源进行安装。如果安装包 time out 错误,则可以修改 pip 源,重新进行安装,修改方式:
- 编辑或新建 pip 配置文件(~/.pip/pip.conf),在配置文件下加入:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
- 安装时将 timeout 时间设置长一点
sudo pip3 --timeout 600
install tensorflow-1.14.0-cp35-cp35m-manylinux1_x86_64.whl
也可使用如下完整命令安装
pip3 install --user tensorflow==1.14.0 --index-url
https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host
https://pypi.tuna.tsinghua.edu.cn --timeout 600
1.5 案例 1:快速开始
1.6 案例 2:张量相加
2. Tensorflow 体系结构
2.1 体系结构概述
TensorFlow 属于“定义”与“运行”相分离的运行机制。从操作层面可以抽象成两种:模型构建和模型运行
- 客户端:用户编程、执行使用
- master:用来与客户端交互,并进行任务调度
- worker process:工作节点,每个 worker process 可以访问一到多个 device
- device:TF 的计算核心,执行计算
2.2 单机模式与分布式模式
TF 的实现分为“单机实现”和“分布式实现”
2.3 后端逻辑层次
3. 基本概念
3.1 张量
张量(Tensor): 多维数组或向量,张量是数据的载体,包含名字、形状、数据类型等属性
3.2 数据流
数据流图(Data Flow Graph)用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。
“节点” 一般用来表示数学操作,也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。
“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运多维数据数组,即“张量”(tensor)。
一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
3.3 操作
操作(Operation,简称 op)指专门执行计算的节点,tensorflow 函数或 API 定义的都是操作。常用操作包括:
- 标量运算,向量运算,矩阵运算
- 带状态的运算
- 神经网络组建
- 存储、恢复
- 控制流
- 队列及同步运算
3.4 图和会话
- 图(Graph)描述整个程序结构,Tensorflow 中所有的计算都构建在图中
- 会话(Session)用来执行图的运算
3.5 变量和占位符
- 在 Tensorflow 中,变量(Variable)是一种操作,变量是一种特殊的张量,能够进行存储持久化(张量不能进行持久化),它的值是张量
- 占位符(placeholder)是变量占位符,当不能确定变量的值时,可以先声明一个占位符,真正执行时再传入变量
4. 图和会话操作
4.1 什么是图
- 图(Graph)描述了计算的过程。TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段。在构建阶段, op 的执行步骤被描述成一个图。在执行阶段, 使用会话执行图中的 op。
- TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点。这个默认图对许多程序来说已经足够用了,也可以创建新的图来描述计算过程。
- 在 Tensorflow 中,op/session/tensor 都有 graph 属性。
4.2 案例 3:查看图对象
4.3 会话及相关操作
会话(session)用来执行图中的计算,并且保存了计算张量对象的上下文信息。会话的作用主要有:
- 运行图结构
- 分配资源
- 掌握资源(如变量、队列、线程)
一个 session 只能执行一个图的运算。可以在会话对象创建时,指定运行的图。如果在构造会话时未指定图形参数,则将在会话中使用默认图。如果在同一进程中使用多个图(使用 tf.graph( )创建),则必须为每个图使用不同的会话,但每个图可以在多个会话中使用。
创建会话
- tf.Session() # 使用默认图
运行
- session.run(fetches, feed_dict=None)
- 参数:
- fetches 图中的单个操作,或多个操作的列表
- feed_dict 运行传入的参数构成的字典,可以覆盖之前的值
关闭
- session.close()
4.4 案例 4:指定会话运行某个图
4.5 会话常见的错误及原因
调用 run()方法时,可能会出现的错误及原因
- RuntimeError:Session 处于无效(如关闭)
- TypeError:fetches 或 feed_dict 的键是不合适的值
- ValueError:fetches 或 feed_dict 的键无效或引用的值不存在