第五章 深度学习
四、TensorFlow
5. 张量及基本运算
5.1 张量的阶与形状
阶:张量的维度(数方括号的层数)
形状表示方法
- 0 维:( )
- 1 维:(5),1 行 5 个元素
- 2 维:(2,3),2 行 3 列
- 3 维:(2,3,4), 两个 3 行 4 列的矩阵
5.2 张量的数据类型
5.3 张量常用属性
属性名称 | 说明 |
---|---|
graph | 所属的默认图 |
op | 张量的操作名 |
name | 名称 |
shape | 形状 |
dtype | 元素类型 |
5.4 案例 5:查看张量属性
5.5 案例 6:生成张量
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 所指定的类型 |
5.7 案例 7:张量类型转换
5.8 占位符
不确定张量内容情况下,可以使用占位符先占个位置,然后执行计算时,通过参数传入具体数据执行计算(通过 feed_dict 参数指定)。placeholder 节点被声明的时候是未初始化的, 也不包含数据, 如果没有为它供给数据, 则 TensorFlow 运算的时候会产生错误。
占位符定义:
- name = placeholder(dtype, shape=None, name=None)
5.9 案例 8:占位符使用
5.10 张量形状改变
静态形状:在创建一个张量,初始状态的形状
- 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
5.11 案例 9:修改张量形状
5.12 张量数学计算
函数名称 | 说明 |
---|---|
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 列对应元素乘积之和
5.13 案例 10:张量数学计算
5.14 变量
变量是一种 op,它的值是张量
变量能够持久化保存,普通张量则不可
当定义一个变量时,需要在会话中进行初始化
变量创建
- tf.Variable(initial_value=None, name=None)
5.15 案例 11:变量使用
6. Tensorboard 工具
6.1 什么是可视化
可视化是用来查看在 Tensorflow 平台下程序运行的过程,包括:张量/变量,操作,数据流,学习过程等,从而方便 TensorFlow 程序的理解、调试与优化。
Tensorflow 提供了专门的可视化工具 tensorboard,它将 tensorflow 执行的数据、模型、过程用图形方式进行显示。tensorflow 在执行过程中,可以通过某些操作,将模型、数据、graph 等信息,保存到磁盘中的 Events 文件中去,从而提供给 tensorboard 进行可视化。
6.2 启动 tensorboard
使用以下命令启动 tensorboard
- tensorboard -logdir=“PycharmProjects/tensorflow_study/summary/”
- 其中,logdir 参数的值为事件文件存储目录,启动成功后可以看到如下信息,使用提示的 URL 地址和端口进行访问:
TensorBoard 1.14.0 at http://127.0.0.1:6006/
6.3 tensorboard 主页说明
6.4 案例 12:为操作添加可视化
注:张量如果未使用默认情况下不显示
6.5 摘要与事件文件操作
如果需要将变量/张量在 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 表示第几次的值
7. 综合案例:实现线性回归
任务描述:
- 给定一组输入、输出作为样本
- 定义线性模型,并进行训练
- 将训练过程可视化