说明
- 本页面无手机端适配,强制缩放阅读。
- 使用纯html格式,保存教学用ppt,添加了部分个人笔记。
- 目录工作正常,可以跳转。
TensorFlow概述
Tensorflow概述
Tensorflow概述
Tensorflow简介
什么是Tensorflow
Tensorflow的特点
Tensorflow的发展历史
Tensorflow体系结构
体系结构概述
单机模式与分布式
后端逻辑层次
基本概念
张量
数据流
操作
图和会话
变量和占位符
Tensorflow安装
案例1:快速开始
案例2:张量相加
TensorFlow简介
知
识
讲
解
什么是Tensorflow
• TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护的
开源深度学习平台,是目前人工智能领域主流的开发平台,在全世界有着
广泛的用户群体。
知
识
讲
解
Tensorflow的特点
• 优秀的构架设计,通过“张量流”进行数据传递和计算,用户可以很容易
地、可视化地看到张量流动的每一个环节
• 可轻松地在CPU/GPU上部署,进行分布式计算,为大数据分析提供计算能
力的支撑
• 跨平台性好,灵活性强。TensorFlow不仅可在Linux、Mac和Windows系
统中运行,甚至还可在移动终端下工作
知
识
讲
解
Tensorflow发展历史
• 2011年,Google公司开发了它的第一代分布式机器学习系统DistBelief。
著名计算机科学家杰夫·迪恩(Jeff Dean)和深度学习专家吴恩达
(Andrew Y.Ng)都是这个项目的核心成员
• 2015年11月,Google将它的升级版实现正式开源,协议遵循Apache 2.0
并更名为TensorFlow
• 目前,TensorFlow最新版为2.X,教学使用1.14.0
知
识
讲
解
Tensorflow安装
Ø
在线安装
ü
安装纯净包:pip install tensorflow
ü
安装GPU版本:pip install tf-nightly-gpu
Ø
离线安装
ü
下载离线包:https://pypi.org/project/tensorflow/#files执行安装
知
识
讲
解
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
知
识
讲
解
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
课
堂
练
习
案例1:快速开始
课
堂
练
习
案例2:张量相加
Tensorflow体系结构
知
识
讲
解
体系结构概述
Ø
TensorFlow属于“定义”与“运行”相分离的运行机制。从操作层面可
以抽象成两种:模型构建和模型运行
ü
客户端:用户编程、执行使用
ü
master:用来与客户端交互,并进行任务调度
ü
worker process:工作节点,每个worker process可以访问一到多个device
ü
device:TF的计算核心,执行计算
知
识
讲
解
单机模式与分布式模式
Ø
TF的实现分为“单机实现”和“分布式实现”
知
识
讲
解
后端逻辑层次
基本概念
知
识
讲
解
张量
Ø
张量(Tensor): 多维数组或向量,张量是数据的载体,包含名字、形
状、数据类型等属性
知
识
讲
解
数据流
Ø
数据流图(Data Flow Graph)用“结点”(nodes)
和“线”(edges)的有向图来描述数学计算
Ø
“节点” 一般用来表示数学操作,也可以表示数据输
入(feed in)的起点/输出(push out)的终点,或者
是读取/写入持久变量(persistent variable)的终点
Ø
“线”表示“节点”之间的输入/输出关系。这些数据
“线”可以输运多维数据数组,即“张量”(tensor)
Ø
一旦输入端的所有张量准备好,节点将被分配到各种计
算设备完成异步并行地执行运算
知
识
讲
解
操作
• 操作(Operation,简称op)指专门执行计算的节点,tensorflow函数或
API定义的都是操作。常用操作包括:
– 标量运算,向量运算,矩阵运算
– 带状态的运算
– 神经网络组建
– 存储、恢复
– 控制流
– 队列及同步运算
知
识
讲
解
图和会话
• 图(
Graph
)描述整个程序结构,Tensorflow中所有的计算都构建在图中
• 会话(
Session)
用来执行图的运算
知
识
讲
解
变量和占位符
• 在Tensorflow中,变量(Variable)是一种操作,变量是一种特殊的张量,
能够进行存储持久化(张量不能进行持久化),它的值是张量
• 占位符(placeholder)是变量占位符,当不能确定变量的值时,可以先声
明一个占位符,真正执行时再传入变量
TensorFlow基本使用
Tensorflow基本使用
Tensorflow基本使用
图和会话操作
什么是图
会话及相关操作
张量及基本运算
张量的阶与形状
张量的数据类型
张量常用属性
张量类型转换
占位符
张量形状改变
张量数学计算
变量
共享变量
图和会话操作
知
识
讲
解
什么是图
• 图(Graph)描述了计算的过程。TensorFlow 程序通常被组织成一个构建
阶段和一个执行阶段。在构建阶段, op 的执行步骤 被描述成一个图. 在执行
阶段, 使用会话执行执行图中的 op.
• TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其
增加节点. 这个默认图对 许多程序来说已经足够用了,也可以创建新的图来
描述计算过程
• 在Tensorflow中,op/session/tensor都有graph属性
课
堂
练
习
案例3:
查看图对象
知
识
讲
解
会话及相关操作
• 会话(session)用来执行图中的计算,并且保存了计算张量对象的上下文
信息。会话的作用主要有:
– 运行图结构
– 分配资源
– 掌握资源(如变量、队列、线程)
• 一个session只能执行一个图的运算。
可以在会话对象创建时,指定运行的
图。如果在构造会话时未指定图形参数,则将在会话中使用默认图。如果
在同一进程中使用多个图(使用tf.graph( )创建),则必须为每个图使用不
同的会话,
但每个图可以在多个会话中使用。
知
识
讲
解
会话及相关操作(续)
• 创建会话
– tf.Session() # 使用默认图
• 运行
– session.run(fetches, feed_dict=None)
– 参数:fetches 图中的单个操作,或多个操作的列表
feed_dict 运行传入的参数构成的字典,可以覆盖之前的值
• 关闭
– session.close()
课
堂
练
习
案例4:指定会话运行某个图
知
识
讲
解
会话常见的错误及原因
• 调用run()方法时,可能会出现的错误及原因
– RuntimeError:Session处于无效(如关闭)
– TypeError:fetches或feed_dict的键是不合适的值
– ValueError:fetches或feed_dict的键无效或引用的值不存在
张量及基本运算
知
识
讲
解
张量的阶与形状
Ø
阶:张量的维度(数方括号的层数)
Ø
形状表示方法
ü
0维:( )
ü
1维:(5),1行5个元素
ü
2维:(2,3),2行3列
ü
3维:(2,3,4), 两个3行4列的矩阵
知
识
讲
解
张量的数据类型
知
识
讲
解
张量常用属性
属性名称
说明
graph
所属的默认图
op
张量的操作名
name
名称
shape
形状
dtype
元素类型
课
堂
练
习
案例5:查看张量属性
课
堂
练
习
案例6:生成张量
知
识
讲
解
张量类型转换
函数名称
说明
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所指定的类型
课
堂
练
习
案例7:张量类型转换
知
识
讲
解
占位符
Ø
不确定张量内容情况下,可以使用占位符先占个位置,然后执行计算时,通过
参数传入具体数据执行计算(通过feed_dict参数指定)。placeholder节点被
声明的时候是未初始化的, 也不包含数据, 如果没有为它供给数据, 则
TensorFlow运算的时候会产生错误
Ø
占位符定义:
name = placeholder(dtype, shape=None, name=None)
课
堂
练
习
案例8:占位符使用
知
识
讲
解
张量形状改变
Ø
静态形状:在创建一个张量,初始状态的形状
ü
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
课
堂
练
习
案例9:修改张量形状
知
识
讲
解
张量数学计算
函数名称
说明
tf.add(x, y)
张量相加
tf.matmul(x, y)
张量相乘
tf.log(x)
求张量的自然对数
tf.reduce_sum(x, axis)
计算张量指定维度上的总和
tf.segment_sum(data, segment_ids)
计算张量片段总和
知
识
讲
解
张量数学计算(续)
Ø
矩阵乘法说明
ü
当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘
ü
矩阵C的行数等于矩阵A的行数,C的列数等于B的列数
ü
乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和
课
堂
练
习
案例10:张量数学计算
课
堂
练
习
案例10:张量数学计算(续)
知
识
讲
解
变量
Ø
变量是一种op,它的值是张量
Ø
变量能够持久化保存,普通张量则不可
Ø
当定义一个变量时,需要在会话中进行初始化
Ø
变量创建
tf.Variable(initial_value=None, name=None)
课
堂
练
习
案例11:变量使用
TensorBoard可视化
Tensorboard可视化
Tensorboard可视化
Tensorboard工具
什么是可视化
启动Tensorboard
Tensorboard主页说明
摘要与事件文件操作
综合案例:实现线性回归
实现线性回归
Tensorboard工具
知
识
讲
解
什么是可视化
Ø
可视化是用来查看在Tensorflow平台下程序运行的过程,包括:张量/
变量,操作,数据流,学习过程等,从而方便 TensorFlow 程序的理解、
调试与优化
Ø
Tensorflow提供了专门的可视化工具tensorboard,它将tensorflow执
行的数据、模型、过程用图形方式进行显示。tensorflow在执行过程中,
可以通过某些操作,将模型、数据、graph等信息,保存到磁盘中的
Events文件中去,从而提供给tensorboard进行可视化
知
识
讲
解
启动tensorboard
Ø
使用以下命令启动tensorboard
tensorboard --logdir="PycharmProjects/tensorflow_study/summary/"
其中,logdir参数的值为事件文件存储目录,启动成功后可以看到如下信息,使用提
示的URL地址和端口进行访问:
知
识
讲
解
tensorboard主页说明
标量
图
课
堂
练
习
案例12:为操作添加可视化
课
堂
练
习
案例12:为操作添加可视化(续)
注:张量如果未使用默认情况下不显示
知
识
讲
解
摘要与事件文件操作
Ø
如果需要将变量/张量在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表示第几次的值
综合案例:实现线性回归
课
堂
练
习
案例13:实现线性回归
• 任务描述:
– 给定一组输入、输出作为样本
– 定义线性模型,并进行训练
– 将训练过程可视化
课
堂
练
习
案例13:实现线性回归(续1)
课
堂
练
习
案例13:实现线性回归(续2)
今日总结
• Tensorflow简介
• 图与会话
• 张量基本操作
• Tensorboard可视化
• 综合案例:线性回归
深度学习
Tensorflow
DAY05
模型保存与加载
模型保存与加载
模型保存与加载
案例1:模型保存/加载
模型保存与加载API
什么是模型保存与加载
模型保存与加载
知
识
讲
解
什么是模型保存与加载
Ø
模型训练可能是一个很长的过程,如果每次执行预测之前都重新训练,会非常耗
时,所以几乎所有人工智能框架都提供了模型保存与加载功能,使得模型训练完
成后,可以保存到文件中,供其它程序使用或继续训练
知
识
讲
解
模型保存与加载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')
课
堂
练
习
案例1:模型保存/加载
课
堂
练
习
案例1:模型保存/加载(续)
Ø
从执行结果可以看出,如果模型之前经过训练,直接从之前的参数值开始执行迭
代,而不是从第一次给的初始值开始
数据读取
数据读取
数据读取
案例2:CSV文件读取
文件读取API
文件读取机制
图片文件读取API
案例3:图片文件读取
数据读取
知
识
讲
解
文件读取机制
Ø
TensorFlow文件读取分为三个步骤:
ü
第一步:将要读取的文件放入文件名队列
ü
第二步:读取文件内容,并实行解码
ü
第三步:批处理,按照指定笔数构建成一个批次取出
知
识
讲
解
文件读取机制(续)
知
识
讲
解
文件读取API
Ø
文件队列构造:生成一个先入先出的队列, 文件阅读器会需
要它来读取数据
tf.train.string_input_producer(string_tensor, shuffle=True)
• string_tensor: 含有文件名的一阶张量
• shuffle: 是否打乱文件顺序
返回:文件队列
知
识
讲
解
文件读取API(续1)
Ø
文件读取:
ü
文本文件读取:tf.TextLineReader
• 读取CSV文件,默认按行读取
ü
二进制文件读取:tf.FixedLengthRecordReader(record_bytes)
• 读取每个记录是固定字节的二进制文件
• record_bytes: 每次读取的字节数
ü
通用读取方法:read(file_queue)
• 从队列中读取指定数量(行,字节)的内容
• 返回值:一个tensor元组,(文件名, value)
知
识
讲
解
文件读取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 - 输出类型
• 返回:转换结果
课
堂
练
习
案例2:CSV文件读取
课
堂
练
习
案例2:CSV文件读取(续)
知
识
讲
解
图片文件读取API
Ø
图像读取器:tf.WholeFileReader
ü
功能:将文件的全部内容作为值输出的reader
ü
read方法:读取文件内容,返回文件名和文件内容
Ø
图像解码器:
ü
tf.image.decode_jpeg(constants) : 解码jpeg格式
ü
tf.image.decode_png(constants) : 解码png格式
返回值:3-D张量,[height, width, channels]
知
识
讲
解
图片文件读取API(续1)
Ø
修改图像大小:tf.image.resize(images, size)
ü
images:图片数据,3-D或4-D张量
3-D:[长,宽,通道]
4-D:[数量, 长,宽,通道]
ü
size:1-D int32张量,[长、宽] (不需要传通道数)
课
堂
练
习
案例3:图片文件读取
课
堂
练
习
案例3:图片文件读取(续)
图像识别
图像识别
手写体识别
网络结构
任务目标
MNIST数据集
相关API
关键代码
服装识别
网络结构
任务目标
数据集介绍
关键代码
执行结果
执行结果
案例4:实现手写体识别
案例5:实现服饰识别
手写体识别
知
识
讲
解
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/
知
识
讲
解
任务目标
• 根据训练集样本进行模型训练
• 保存模型
• 加载模型,用于新的手写体数字识别
知
识
讲
解
网络结构
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
知
识
讲
解
相关API
Ø
tf.matmul():执行矩阵乘法计算
Ø
tf.nn.softmax():softmax激活函数
Ø
tf.reduce_sum():指定维度上求张量和
Ø
tf.train.GradientDescentOptimizer():优化器,执行梯度下降
Ø
tf.argmax():返回张量最大元素的索引值
知
识
讲
解
关键代码
• 定义数据
知
识
讲
解
关键代码(续1)
• 模型搭建
知
识
讲
解
关键代码(续2)
• 执行训练
知
识
讲
解
关键代码(续3)
• 模型评估
知
识
讲
解
关键代码(续4)
• 模型测试
知
识
讲
解
执行结果
课
堂
练
习
案例4:实现手写体识别
Ø
见mnist_demo.py
服饰识别
知
识
讲
解
数据集介绍
•
是来自 Zalando 文章的数据集,是时尚版的 MNIST。
包括 60,000 个训练集数据,10,000 个测试集数据, 每
个数据为 28x28 灰度图像,一共有 10 类:
0
T-shirt/top
T恤
1
Trouser
裤子
2
Pullover
套衫
3
Dress
衣服
4
Coat
外套
5
Sandal
凉鞋
6
Shirt
衬衫
7
Sneaker
运动鞋
8
Bag
包
9
Ankle boot
短靴
知
识
讲
解
任务目标
• 搭建卷积神经网络模型
• 根据训练集样本进行模型训练
• 用于新的服饰图片识别
知
识
讲
解
网络结构
卷
积
池
化
层
1
[-1, 28, 28, 1]
卷
积
池
化
层
2
[-1, 14, 14, 12]
[-1, 7, 7, 24]
[-1, 7*7*24]
全
连
接
层
1
全
连
接
层
2
丢
弃
层
[-1, 10]
知
识
讲
解
关键代码
知
识
讲
解
关键代码(续1)
知
识
讲
解
关键代码(续2)
知
识
讲
解
关键代码(续3)
知
识
讲
解
关键代码(续4)
知
识
讲
解
关键代码(续5)
知
识
讲
解
执行结果
课
堂
练
习
案例5:实现服饰识别
Ø
见fashion_mnist_demo.py
今日总结
• 模型保存与加载
• 文件读取
• 图像分类:手写体识别、服饰识别