一、安装
cpu版:
conda install tensorflow==1.8 -i https://mirrors.aliyun.com/pypi/simple
https://www.cnblogs.com/liuhuacai/p/11684666.html
安装 cudatoolkit10.0.130 cudnn7.6.5
更新numpy: install numpy==1.16.0
二、框架介绍
2.1 TF数据流图
构建图阶段:
图:tensorflow将计算表示为指令之间的依赖关系
可以理解为流程图,定义了数据(张量Tensor)和操作(节点Op)
执行图阶段
会话:跨一个或多个本地或远程设备运行数据流图的机制
让之前定义好的数据和操作运行
节点:提供图当中执行的操作
2.2 图与TensorBoard
2.2.1 什么是图结构
图结构:数据(Tensor)+操作(Operation)
2.2.2 图相关操作
1. 默认图
通常TensorFlow会默认帮助创建一张图
- 调用方法
tf.get_default_graph()
- 查看属性
.gragh
2.创建图
new_g = tf.graph()
with new_g.as_default():
定义数据和操作
2.2.3 TensorBoard:可视化学习
1.数据序列化-events文件
将图数据序列化后写入到文件中
tf.summary.FileWriter(path, graph=sess.graph)
2.启动TensorBoard
tensorboard --logdir="./tmp/summary"
127.0.0.1:6006
2.2.4 OP
数据:Tensor对象
操作:Operation对象 - OP
1 常见OP
操作函数 | 操作对象 |
---|---|
tf.constant(Tensor对象) | 输入Tensor对象 - Const - 输出 Tensor对象 |
tf.add(Tensor对象1, Tensor对象2) | 输入Tensor对象1,Tensor对象2 - Add对象 - 输出 Tensor对象3 |
在调用操作函数的过程中会生成操作对象
一个操作对象(Operation)是TensorFlow图中的一个节点,可以接受0个或者多个输入Tensor,并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。
2 指令名称
一张图一个命名空间
2.3 会话
2.3.1 会话
tf.Session:用于完整的程序当中
tf.InteractiveSession:用于交互式上下文中的TensorFlow,例如shell
1 init(target=’’, graph=None, config=None)
会话是拥有资源的对象,如tf.Variable,tf.QueueBase和tf.ReaderBase。当这些资源不再需要时,必须要释放这些资源。tf.Session.close 使用上下文管理器
target:用于指定TensorFlow服务器的地址
config:可通过tf.ConfigProto打印设备使用信息(操作都运行在哪个设备上)
2 会话的run()
run(fetches,feed_dict=None,options=None,run_metadata=None)
fetches:单一的operation,或者列表、元祖(其它不属于tensorflow的类型不行)
a = tf.constant(5.0)
b = tf,cibstabt(6.0)
c = a * b
# 创建会话
sess = tf.Session()
# 计算C的值
print(sess.run(c))
print(c.eval(session=sess))
feed_dict:与tf.placeholder搭配使用,检查值得形状是否与占位符兼容 。placeholder提供占位符,run时通过feed_dict指定参数
使用场景:在定义张量时不确定具体值(可理解为张量类型的变量)
运行时报的错误error:
RuntimeError: Session是无效状态(如已关闭)
TypeError: fetches或者feed_dict键的类型不合适
ValueError: fetches或feed_dict键无效或引用Tensor不存在的键。
2.4 张量
TensorFlow的张量就是一个n维数组,类型为tf.Tensor。有两个重要属性:type:数据类型,shape:形状(阶)
2.4.1 张量
标量 | 一个数字 |
向量 | 一维数组 [2,3,4] |
矩阵 | 二维数组 [[2,3,4],[2,3,4]] |
。。。。 | 。。。。 |
张量 | n维数组 |
1 张量的类型
2 张量的阶
2.4.2 创建张量的指令
固定值张量
tf.zeros(shape, dtype=tf.float32, name=None)
tf.ones(shape, dtype=tf.float32, name=None)
tf.constant(shape, dtype=tf.float32, name=None)
# tf.ones(shape=[3, 4])
.eval()
####随机值张量
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32)
# mean:均值 stddev:标准差
2.4.3 张量的变换
ndarray属性的修改:
类型的修改:1)ndarray.astype(type) 2)ndarray.tostring()
形状的修改:1)ndarray.reshape(shape) -1自动计算形状 返回新数组 2)ndarray.resize(shape) 直接修改原来的数组
1 类型改变
tf.cast(tensor, dtype, name=None)
不会改变原始的tensor,返回新的改变类型后的tensor
2 形状改变
静态形状 - 开始创建张量时的形状
1)如何改变静态形状
只有在形状没有完全固定下来的情况下才能改变、更新静态形状
tensor.set_shape(shape)
2) 如何改变动态形状(可改变阶数)
tf.reshape(tensor, shape)
不会改变原始的tensor,返回新的改变类型后的tensor
必须保证张量的元素个数必须匹配(如:2,3改为3,2)
2.4.4 张量的数学运算
算术运算符
基本数学函数
矩阵运算
reduce 操作
序列索引操作
2.5 变量OP
TensorFlow里特有的 - 变量,特点:存储持久化、可修改值、可指定被训练
可以理解为是为存储模型参数设计的
2.5.1 创建变量
tf.Variable(initial_value=None, trainable=True, collections=None,name=None)
initial_value:初始化的值
trainable:是否被训练
注:变量需要显式初始化,才能运行值
2.5.2 使用tf.variable_scope()修改变量的命名空间
使结构更加清晰
2.6 高级API
2.6.1 基础API
1 tf.app
为TensorFlow运行的脚本提供一个main函数入口
2 tf.image
3 tf.gfile
4 tf.summary
用于生成TensorFlow可用的统计日志,目前主要提供了4种类型:audio, image, histogram, scalar
2 tf.python_io
2 tf.train
2 tf.nn
提供了一些构建神经网络的底层函数。TensorFlow构建网络的核心模块。其中包含了添加各种层的函数,如添加卷积层、池化层等。
2.6.2 高级API
2 tf.keras
2 tf.layers
2 tf.contrib
2 tf.estimator
2.7 案例:线性回归
2.7.1 原理
1)构建模型
2)构造损失函数 均方误差
3)优化损失 梯度下降
2.7.2 案例实现
1 案例确定
100样本
2 API
矩阵乘 tf.matmul(x, w)
平方tf.square(error)
均值 tf.reduce_mean(eooro)
梯度下降优化 tf.train.GradientDescentOptimizer(learning_rate)
5 学习率的设置、步数的设置与梯度爆炸
梯度爆炸:在极端情况下,权重的值变得非常大,以至于溢出,导致NaN值
6 变量的trainable设置观察
指定变量是否训练
2.7.3 增加其他功能
1 TensorBoard增加变量显示
1、收集变量
tf.summary.scalar(name="",tensor) 标量
tf.summary.histogram(name=’’,tensor)收集高维度的变量参数
tf.summary.image(name=’’,tensor)图片
2、合并变量写入事件文件
merged = tf.summary.merge_all()
运行合并:summary=sess.run(merged),每次迭代都需运行
添加:FileWriter.add_summary(summary, i) i表示第几次的值
- 创建事件文件
- 收集变量
- 合并变量
- 每次迭代运行一次合并变量
- 每次迭代将summary对象写入事件文件
2 增加命名空间
3 模型的保存与加载
tf.train.Saver(var_list=None, max_to_keep=5)
var_list:指定将要保存和还原的变量。
max_to_keep:指示要保留的最近检查点文件的最大数量。
1)实例化Saver
2)保存
saver.save(sess, path)
3)加载
saver.restore(sess, path)
4 命令行参数使用
1、tf.app.flags
支持应用从命令行接受参数,可以用来指定集群配置等。
tf.app.flags.DEFINE_integer(“max_step”, 0, “训练模型的步数”) 参数名,默认值,变量说明
tf.app.flags.DEFINE_string(“model_dir”, “”, “模型保存的路径+模型名字”)
2、FLAGS = tf.app.flags.FLAGS
通过FLAGS.max_step调用命令行中传过来的参数
3、通过tf.app.run()启动main(argv)函数