一、TensorFlow框架使用
TensorFlow框架的使用:
1.TensorFlow的结构
2.TensorFlow的各个组件
图
会话
张量
变量
二、深度学习与机器学习的区别
1.特征提取方面
机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识。
深度学习通常由多个层次组成,他们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型。通过训练大量数据自动得出模型,不需要人工特征提取环节。
2.数据量和计算性能要求
机器学习需要执行时间远少于深度学习,深度学习参数往往很庞大,需要通过大量数据的多次优化来训练参数。
3.算法代表
机器学习:朴素贝叶斯、决策树等
深度学习:神经网络
三、TensorFlow结构分析
1.TensorFlow程序通常被组织成一个构建图阶段和一个执行图阶段。
- 在构建阶段,数据与操作的执行步骤被描绘成一个圆。(流程图:定义数据(张量Tensor)和操作(节点Op))
- 在执行阶段,使用会话执行构建好的图中的操作。(调用各方资源,将定义好的数据和操作运行起来)
图和会话:
图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示方法
会话:TensorFlow跨一个或多个本地或远程设备之间运行数据流图的机制
张量:TensorFlow中的基本数据对象
节点:提供图当中执行的操作
2.数据流图介绍:
Tensor——张量——数据
Flow——流动
四、图结构
图包含了一组tf.Operation代表的计算单元和tf.Tensor代表的计算单元之间流动的数据。
图相关操作
- 默认图
查看默认图的俩种方式:
(1)、调用方法:通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
(2)、查看属性:op、sess都含有穿啊见图graph属性,默认都在一张图中
- 创建图
New_g=tf.Graph()
With new_g.as.default():
定义数据和操作
五、TensorBoard:可视化学习
1.数据序列化——event文件
tf.summary.FileWriter(path,graph=sess.graph)
2.启动TensorBoard
tensorBoard --logdir=”path”
六、OP
类型 | 实例 |
标量运算 | add/sub/mul/div/exp/log/greater/less/equal |
向量运算 | Concat/slice/splot/constant/rank/shape/shuffle |
矩阵运算 | Matmul/matrixinverse/matrixdateminant |
带状态的运算 | Variable/assign/assginadd |
神经网络的组件 | Softmax/sigmoid/relu/convolution/max_pool |
存储、恢复 | Save/restore |
队列及同步运算 | Enqueue/dequeue/mutexAcquire/MutexRelease |
控制流 | Merge/Switch/Enter/Leave/Nextiteration |
七、会话
俩种开启方式:
- tf.Session:用于完整的程序当中
- tf.InteractiveSession:用于交互式上下文中的TensorFlow
会话掌握资源,用完回收资源——tf.Session.close关掉不必要的会话
初始化会话对象时的参数:
Graph=None
Target:将此参数留空,使用本地计算机,指定网址远程服务器
Config:tf.ConfigProto以便控制会话的行为
会话的run():
Run(fetches,feed_dict=None,options=None,run_metadata=None)
Fetches:单一的operation,或者列表、元组
八、张量
- Type
- Shape
张量默认类型tf.float32
创建张量的指令:
固定值张量:
tf.zeros(shape,dtype=tf.float32,name=None)
tf.ones(shape,dtype=tf.float32,name=None)
tf.constant(value,dtype=None,shape=None,name=’Const’)
创建随机张量:
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)符合正态分布
九、张量的变换
类型的修改:
- ndarray.astype(type)
tf.cast(tensor,dtype,name=None)
- ndarray.tostring()
形状的修改:
- ndarray.reshape(shape)
-1 自动计算形状
- ndarray.resize(shape)
静态形状——初始创建张量的形状
tf.set_shape()更新形状未确定的部分
动态形状——tf.reshape(tensor,type)
动态创建新张量时,张量的元素个数必须匹配
十、变量OP
变量的特点:
- 存储持久化
- 可修改值
- 可指定被训练
创建变量:
tf.Variable(initial_value=None,trainable=True,collectionsNone,name=None)
initial_value:初始化的值
trainable:是否被训练
collections:新变量将添加到列出的图的集合中collections
初始化变量:
Init=tf.global_variables_initializer()
运行初始化变量:
Sess.run(init)
使用tf.variable_scope()修改变量的命名空间
十一、API
基础API
- Tf.app:相当于TensoeFlow进行的脚本提供一个main函数入口
- Tf.image:图像处理操作
- Tf.gfile:提供一组文件操作的函数
- Tf.summary:用于生成TensorBoard可用的统计日志
- Tf.python_io:读写TFRecords文件
- Tf.train:提供训练器,与tf.nn组合,实现网络优化计算
- Tf.nn:神经网络的底层函数
高级API
- Tf.keras:独立的深度学习库
- Tf.layers:
- Tf.contrib:
- Tf.estimator:相当于Model+training+Evaluate的合体
十二、线性回归
(1)、构建模型
Y=w1*x1+w2*x2+…+wn*xn+b
(2)、构造损失函数
均方误差
(3)、优化损失
梯度下降
线性回归的训练流程分析:
(1)、准备样本
(2)、构建模型
Y_predict=tf.matmul(x,weights)+bias
(3)、构造损失函数
Error=tf.reduce_mean(tf.square(y_predict-y_true))
(4)、优化损失
Optimizer=Tf.train.GradientDescentOptimizer(learning_rate=0.01).mininize(error)
十三、增加其他功能
- 增加变量显示
(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 对象写入事件文件
- 增加命名空间
Tf.variable_scope()
- 模型的保存于加载
Tf.train.Saver(var_list=None,max_to_keep=5)
- 实例化Saver
- 保存 saver.save(sess,path.ckpt)
- 加载 saver.restore(sess,path.ckpt)
- 命令行参数使用
(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调用命令行中传过来的参数