说明

  • 本页面无手机端适配,强制缩放阅读。
  • 使用纯html格式,保存教学用ppt,添加了部分个人笔记。
  • 目录工作正常,可以跳转。

TensorFlow概述


background image

Tensorflow概述

Tensorflow概述

Tensorflow简介

什么是Tensorflow

Tensorflow的特点

Tensorflow的发展历史

Tensorflow体系结构

体系结构概述

单机模式与分布式

后端逻辑层次

基本概念

张量

数据流

操作

图和会话

变量和占位符

Tensorflow安装

案例1:快速开始

案例2:张量相加

TensorFlow简介


background image




什么是Tensorflow

• TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护的

开源深度学习平台,是目前人工智能领域主流的开发平台,在全世界有着
广泛的用户群体。


background image




Tensorflow的特点

• 优秀的构架设计,通过“张量流”进行数据传递和计算,用户可以很容易

地、可视化地看到张量流动的每一个环节

• 可轻松地在CPU/GPU上部署,进行分布式计算,为大数据分析提供计算能

力的支撑

• 跨平台性好,灵活性强。TensorFlow不仅可在Linux、Mac和Windows系

统中运行,甚至还可在移动终端下工作


background image




Tensorflow发展历史

• 2011年,Google公司开发了它的第一代分布式机器学习系统DistBelief。

著名计算机科学家杰夫·迪恩(Jeff Dean)和深度学习专家吴恩达
(Andrew Y.Ng)都是这个项目的核心成员

• 2015年11月,Google将它的升级版实现正式开源,协议遵循Apache 2.0

并更名为TensorFlow

• 目前,TensorFlow最新版为2.X,教学使用1.14.0


background image




Tensorflow安装

Ø

在线安装

ü

安装纯净包:pip install tensorflow

ü

安装GPU版本:pip install tf-nightly-gpu

Ø

离线安装

ü

下载离线包:https://pypi.org/project/tensorflow/#files执行安装


background image




Tensorflow安装(续)

Ø

修改源进行安装。如果安装包time out错误,则可以修改pip源,重新进行安
装,修改方式:

(1)编辑或新建pip配置文件(~/.pip/pip.conf),在配置文件下加入:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
(2)安装时将timeout时间设置长一点
sudo pip3 --timeout 600 
install tensorflow-1.14.0-cp35-cp35m-manylinux1_x86_64.whl


background image




Tensorflow安装(续1)

Ø

也可使用如下完整命令安装:

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


background image




案例1:快速开始


background image




案例2:张量相加

Tensorflow体系结构


background image




体系结构概述

Ø

TensorFlow属于“定义”与“运行”相分离的运行机制。从操作层面可
以抽象成两种:模型构建和模型运行

ü

客户端:用户编程、执行使用

ü

master:用来与客户端交互,并进行任务调度

ü

worker process:工作节点,每个worker process可以访问一到多个device

ü

device:TF的计算核心,执行计算


background image




单机模式与分布式模式

Ø

TF的实现分为“单机实现”和“分布式实现”


background image




后端逻辑层次

基本概念


background image




张量

Ø

张量(Tensor): 多维数组或向量,张量是数据的载体,包含名字、形
状、数据类型等属性


background image




数据流

Ø

数据流图(Data Flow Graph)用“结点”(nodes)
和“线”(edges)的有向图来描述数学计算

Ø

“节点” 一般用来表示数学操作,也可以表示数据输
入(feed in)的起点/输出(push out)的终点,或者
是读取/写入持久变量(persistent variable)的终点

Ø

“线”表示“节点”之间的输入/输出关系。这些数据
“线”可以输运多维数据数组,即“张量”(tensor)

Ø

一旦输入端的所有张量准备好,节点将被分配到各种计
算设备完成异步并行地执行运算


background image




操作

• 操作(Operation,简称op)指专门执行计算的节点,tensorflow函数或

API定义的都是操作。常用操作包括:

– 标量运算,向量运算,矩阵运算
– 带状态的运算
– 神经网络组建
– 存储、恢复
– 控制流
– 队列及同步运算


background image




图和会话

• 图(

Graph

)描述整个程序结构,Tensorflow中所有的计算都构建在图中

• 会话(

Session)

用来执行图的运算


background image




变量和占位符

• 在Tensorflow中,变量(Variable)是一种操作,变量是一种特殊的张量,

能够进行存储持久化(张量不能进行持久化),它的值是张量

• 占位符(placeholder)是变量占位符,当不能确定变量的值时,可以先声

明一个占位符,真正执行时再传入变量

TensorFlow基本使用


background image

Tensorflow基本使用

Tensorflow基本使用

图和会话操作

什么是图

会话及相关操作

张量及基本运算

张量的阶与形状

张量的数据类型

张量常用属性

张量类型转换

占位符

张量形状改变

张量数学计算

变量

共享变量

图和会话操作


background image




什么是图

• 图(Graph)描述了计算的过程。TensorFlow 程序通常被组织成一个构建

阶段和一个执行阶段。在构建阶段, op 的执行步骤 被描述成一个图. 在执行
阶段, 使用会话执行执行图中的 op.  

• TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其

增加节点. 这个默认图对 许多程序来说已经足够用了,也可以创建新的图来
描述计算过程

• 在Tensorflow中,op/session/tensor都有graph属性


background image




案例3:

查看图对象


background image




会话及相关操作

• 会话(session)用来执行图中的计算,并且保存了计算张量对象的上下文

信息。会话的作用主要有:

– 运行图结构
– 分配资源
– 掌握资源(如变量、队列、线程)

• 一个session只能执行一个图的运算。

可以在会话对象创建时,指定运行的

图。如果在构造会话时未指定图形参数,则将在会话中使用默认图。如果
在同一进程中使用多个图(使用tf.graph( )创建),则必须为每个图使用不
同的会话,

但每个图可以在多个会话中使用。


background image




会话及相关操作(续)

• 创建会话

– tf.Session()   # 使用默认图

• 运行

– session.run(fetches, feed_dict=None)
– 参数:fetches  图中的单个操作,或多个操作的列表
               feed_dict  运行传入的参数构成的字典,可以覆盖之前的值

• 关闭

– session.close()


background image




案例4:指定会话运行某个图


background image




会话常见的错误及原因

• 调用run()方法时,可能会出现的错误及原因

– RuntimeError:Session处于无效(如关闭)
– TypeError:fetches或feed_dict的键是不合适的值
– ValueError:fetches或feed_dict的键无效或引用的值不存在

张量及基本运算


background image




张量的阶与形状

Ø

阶:张量的维度(数方括号的层数)

Ø

形状表示方法

ü

0维:( )

ü

1维:(5),1行5个元素

ü

2维:(2,3),2行3列

ü

3维:(2,3,4), 两个3行4列的矩阵


background image




张量的数据类型


background image




张量常用属性

属性名称

说明

graph

所属的默认图

op

张量的操作名

name

名称

shape

形状

dtype

元素类型


background image




案例5:查看张量属性


background image




案例6:生成张量


background image




张量类型转换

函数名称

说明

tf.string_to_number(string_tensor)

字符串转换为数字

tf.to_double(x)

转换为64位浮点型

tf.to_float(x)

转换为32位浮点型

tf.to_int32(x)

tf.to_int64(x)

转换为32/64位整型

tf.cast(x, dtype)

将x转换为dtype所指定的类型


background image




案例7:张量类型转换


background image




占位符

Ø

不确定张量内容情况下,可以使用占位符先占个位置,然后执行计算时,通过
参数传入具体数据执行计算(通过feed_dict参数指定)。placeholder节点被
声明的时候是未初始化的, 也不包含数据, 如果没有为它供给数据, 则
TensorFlow运算的时候会产生错误

Ø

占位符定义:

name = placeholder(dtype, shape=None, name=None)


background image




案例8:占位符使用


background image




张量形状改变

Ø

静态形状:在创建一个张量,初始状态的形状

ü

tf.Tensor.get_shape():获取Tensor对象的静态形状

ü

tf.Tensor.set_shape():更新Tensor对象的静态形状

注意:转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状;
对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状

Ø

动态形状:在运行图时,动态形状才是真正用到的,这种形状是一种描
述原始张量在执行过程中的一种张量

ü

tf.reshape(tf.Tensor, shape) :创建一个具有不同动态形状的新张量

ü

可以跨纬度转换,如1D-->2D, 1D-->3D


background image




案例9:修改张量形状


background image




张量数学计算

函数名称

说明

tf.add(x, y)

张量相加

tf.matmul(x, y)

张量相乘

tf.log(x)

求张量的自然对数

tf.reduce_sum(x, axis)

计算张量指定维度上的总和

tf.segment_sum(data, segment_ids)

计算张量片段总和


background image




张量数学计算(续)

Ø

矩阵乘法说明

ü

当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘

ü

矩阵C的行数等于矩阵A的行数,C的列数等于B的列数

ü

乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和


background image




案例10:张量数学计算


background image




案例10:张量数学计算(续)


background image




变量

Ø

变量是一种op,它的值是张量

Ø

变量能够持久化保存,普通张量则不可

Ø

当定义一个变量时,需要在会话中进行初始化

Ø

变量创建

tf.Variable(initial_value=None, name=None)


background image




案例11:变量使用

TensorBoard可视化


background image

Tensorboard可视化

Tensorboard可视化

Tensorboard工具

什么是可视化

启动Tensorboard

Tensorboard主页说明

摘要与事件文件操作

综合案例:实现线性回归

实现线性回归

Tensorboard工具


background image




什么是可视化

Ø

可视化是用来查看在Tensorflow平台下程序运行的过程,包括:张量/
变量,操作,数据流,学习过程等,从而方便 TensorFlow 程序的理解、
调试与优化

Ø

Tensorflow提供了专门的可视化工具tensorboard,它将tensorflow执
行的数据、模型、过程用图形方式进行显示。tensorflow在执行过程中,
可以通过某些操作,将模型、数据、graph等信息,保存到磁盘中的
Events文件中去,从而提供给tensorboard进行可视化


background image




启动tensorboard

Ø

使用以下命令启动tensorboard

     tensorboard  --logdir="PycharmProjects/tensorflow_study/summary/"

其中,logdir参数的值为事件文件存储目录,启动成功后可以看到如下信息,使用提
示的URL地址和端口进行访问:


background image




tensorboard主页说明

标量


background image




案例12:为操作添加可视化


background image




案例12:为操作添加可视化(续)

注:张量如果未使用默认情况下不显示


background image




摘要与事件文件操作

Ø

如果需要将变量/张量在tensorboard中显示,需要执行以下两步:

ü

收集变量

tf.summary.scalar(name, tensor)  # 收集标量,name为名字,tensor为值

tf.summary.histogram(name, tensor) # 收集高维度变量参数

tf.summary.image(name, tensor) # 收集图片张量

ü

合并变量并写入事件文件

merged = tf.summary.merge_all() # 合并所有变量

summary = sess.run(merged)   # 运行合并,每次迭代训练都需要运行

FileWriter.add_summary(summary, i)   # 添加摘要,i表示第几次的值

综合案例:实现线性回归


background image




案例13:实现线性回归

• 任务描述:

– 给定一组输入、输出作为样本
– 定义线性模型,并进行训练
– 将训练过程可视化


background image




案例13:实现线性回归(续1)


background image




案例13:实现线性回归(续2)


background image

今日总结

• Tensorflow简介
• 图与会话
• 张量基本操作
• Tensorboard可视化
• 综合案例:线性回归


background image

深度学习

Tensorflow

DAY05


background image

模型保存与加载

模型保存与加载

模型保存与加载

案例1:模型保存/加载

模型保存与加载API

什么是模型保存与加载


background image

模型保存与加载


background image




什么是模型保存与加载

Ø

模型训练可能是一个很长的过程,如果每次执行预测之前都重新训练,会非常耗
时,所以几乎所有人工智能框架都提供了模型保存与加载功能,使得模型训练完
成后,可以保存到文件中,供其它程序使用或继续训练


background image




模型保存与加载API

Ø

模型保存与加载通过tf.train.Saver对象完成,实例化对象:

saver = tf.train.Saver(var_list=None, max_to_keep=5)

• var_list: 要保存和还原的变量,可以是一个dict或一个列表
• max_to_keep: 要保留的最近检查点文件的最大数量。创建新文件时,会删除较旧的文件

(如

max_to_keep=5表示保留5个检查点文件

Ø

保存:saver.save(sess, '/tmp/ckpt/model')

Ø

加载:saver.restore(sess, '/tmp/ckpt/model')


background image




案例1:模型保存/加载


background image




案例1:模型保存/加载(续)

Ø

从执行结果可以看出,如果模型之前经过训练,直接从之前的参数值开始执行迭
代,而不是从第一次给的初始值开始


background image

数据读取

数据读取

数据读取

案例2:CSV文件读取

文件读取API

文件读取机制

图片文件读取API

案例3:图片文件读取


background image

数据读取


background image




文件读取机制

Ø

TensorFlow文件读取分为三个步骤:

ü

第一步:将要读取的文件放入文件名队列

ü

第二步:读取文件内容,并实行解码

ü

第三步:批处理,按照指定笔数构建成一个批次取出


background image




文件读取机制(续)


background image




文件读取API

Ø

文件队列构造:生成一个先入先出的队列, 文件阅读器会需
要它来读取数据

tf.train.string_input_producer(string_tensor, shuffle=True)

• string_tensor: 含有文件名的一阶张量
• shuffle: 是否打乱文件顺序

返回:文件队列


background image




文件读取API(续1)

Ø

文件读取:

ü

文本文件读取:tf.TextLineReader

• 读取CSV文件,默认按行读取

ü

二进制文件读取:tf.FixedLengthRecordReader(record_bytes)

• 读取每个记录是固定字节的二进制文件
• record_bytes: 每次读取的字节数

ü

通用读取方法:read(file_queue)

• 从队列中读取指定数量(行,字节)的内容
• 返回值:一个tensor元组,(文件名, value)


background image




文件读取API(续2)

Ø

文件内容解码:

ü

解码文本文件:tf.decode_csv(records, record_defaults)

• 将CSV文件内容转换为张量,与tf.TextLineReader搭配使用
• 参数:records: 字符串,对应文件中的一行

record_defaults: 类型

•  返回:tensor对象列表

ü

解码二进制文件:tf.decode_raw(input_bytes, out_type)

• 将字节转换为由数字表示的张量,与tf.FixedLengthRecordReader搭配使用
• 参数:   input_bytes - 待转换字节

out_type - 输出类型

• 返回:转换结果


background image




案例2:CSV文件读取


background image




案例2:CSV文件读取(续)


background image




图片文件读取API

Ø

图像读取器:tf.WholeFileReader

ü

功能:将文件的全部内容作为值输出的reader

ü

read方法:读取文件内容,返回文件名和文件内容

Ø

图像解码器:

ü

tf.image.decode_jpeg(constants) : 解码jpeg格式

ü

tf.image.decode_png(constants) : 解码png格式

返回值:3-D张量,[height, width, channels]


background image




图片文件读取API(续1)

Ø

修改图像大小:tf.image.resize(images, size)

ü

images:图片数据,3-D或4-D张量

3-D:[长,宽,通道]

4-D:[数量, 长,宽,通道]

ü

size:1-D int32张量,[长、宽] (不需要传通道数)


background image




案例3:图片文件读取


background image




案例3:图片文件读取(续)


background image

图像识别

图像识别

手写体识别

网络结构

任务目标

MNIST数据集

相关API

关键代码

服装识别

网络结构

任务目标

数据集介绍

关键代码

执行结果

执行结果

案例4:实现手写体识别

案例5:实现服饰识别


background image

手写体识别


background image




MNIST数据集

Ø

手写数字的数据集,来自美国国家标准与技术研
究所(National Institute of Standards and 
Technology,NIST),发布与1998年

Ø

样本来自250个不同人的手写数字,50%高中学
生,50%是人口普查局的工作人员

Ø

数字从0~9,图片大小是28×28像素,训练数据
集包含60000个样本,测试数据集包含10000个
样本。

数据集的标签是长度为 10 的一维数组,

数组中每个元素索引号表示对应数字出现的概率 。

Ø

下载地址:

http://yann.lecun.com/exdb/mnist/


background image




任务目标

• 根据训练集样本进行模型训练
• 保存模型
• 加载模型,用于新的手写体数字识别


background image




网络结构

x

1

x

2

x

3

x

784

.

.

.

.

.

.

b

1

b

2

b

3

b

4

b

5

b

6

b

7

b

8

b

9

b

10

softmax

0.001

0.635

0.015

.

.

.

.

.

.

0.002


background image




相关API

Ø

tf.matmul():执行矩阵乘法计算

Ø

tf.nn.softmax():softmax激活函数

Ø

tf.reduce_sum():指定维度上求张量和

Ø

tf.train.GradientDescentOptimizer():优化器,执行梯度下降

Ø

tf.argmax():返回张量最大元素的索引值


background image




关键代码

• 定义数据


background image




关键代码(续1)

• 模型搭建


background image




关键代码(续2)

• 执行训练


background image




关键代码(续3)

• 模型评估


background image




关键代码(续4)

• 模型测试


background image




执行结果


background image




案例4:实现手写体识别

Ø

见mnist_demo.py


background image

服饰识别


background image




数据集介绍

是来自 Zalando 文章的数据集,是时尚版的 MNIST。
包括 60,000 个训练集数据,10,000 个测试集数据, 每
个数据为 28x28 灰度图像,一共有 10 类:

0

T-shirt/top

T恤

Trouser

裤子

Pullover

套衫

3

Dress

衣服

Coat

外套

Sandal

凉鞋

Shirt

衬衫

Sneaker

运动鞋

Bag

Ankle boot

短靴


background image




任务目标

• 搭建卷积神经网络模型
• 根据训练集样本进行模型训练
• 用于新的服饰图片识别


background image




网络结构

1

[-1, 28, 28, 1]

2

[-1, 14, 14, 12]

[-1, 7, 7, 24]

[-1, 7*7*24]

1

2

[-1, 10]


background image




关键代码


background image




关键代码(续1)


background image




关键代码(续2)


background image




关键代码(续3)


background image




关键代码(续4)


background image




关键代码(续5)


background image




执行结果


background image




案例5:实现服饰识别

Ø

见fashion_mnist_demo.py


background image

今日总结

• 模型保存与加载
• 文件读取
• 图像分类:手写体识别、服饰识别