概述
1. 训练模型是怎么回事
训练模型是指,通过程序的反复迭代来修正神经网络中各个节点的值,从而实现具有一定拟合效果的算法。
在训练神经网络的过程中,数据流有两个方向:正向和反向。
- 正向负责预测生成结果,沿着网络节点的运算方向一层层计算下去。
- 反向负责优化调整模型参数,即用链式求导将误差和梯度从输出节点开始一层层传去,对每层的参数进行调整。
训练模型的完整步骤如下:
- 通过正向生成一个值,然后计算该值和真实标签之间的误差
- 利用反向求导的方式,将误差从网络的最后一层传到前一层
- 对前一层中的参数求偏导,并按照偏导结果方向和大小调整参数
- 通过循环的方式,重复上述步骤
2. 用“静态图”方式训练模型
了解静态图的操作方式
静态图的操作方式可以抽象成两种:构建模型和模型运行
- 模型构建:正反两个方向构建模型
- 模型运行:通过多次迭代的方式运行模型
在TensorFlow1.x版本中使用静态图
- 定义操作符
- 构建模型
- 建立会话(调用tf.session之类的函数)
- 在会话力运行张量流并输出结果
在TensorFlow2.x版本中使用静态图
由于静态图不是TensorFlow2.x中的默认工作模式,所以在使用时还需要注意两点:
- 在代码的最开始出,用tf.compat.v1.disable_v2_behavior函数关闭动态模式
- 将TensorFlow1.x版本中的静态图接口,替换成tf.compat.v1模块下对应接口
- 将函数tf.placeholder替换成函数tf.compat.v1.placeholder
- 将函数tf.session替换成函数tf.compat.v1.session
3. 用“动态图”方式训练模型
动态图主要是在原始的静态图上做了编程模式的优化,使得TensorFlow变得更简单、更直观。
例如,在调用tf.matmul后,动态图与静态图中的区别:
- 在动态图中,程序会直接得到两个矩阵相乘的值
- 在静态图中,程序只会生成一个op。该op必须在会话中使用run方法才能进行真正的计算
在TensorFlow1.x版本中使用动态图
需要在程序最开始处加上以下代码:
tf.enable_eager_execution()
在TensorFlow2.x版本中使用动态图
TensorFlow1.x中的tf.enable_eager_execution函数在TensorFlow2.x版本中已经被删除,另外在TensorFlow2.x版本中还提供了关闭动态图和起动动态图的两种函数
关闭动态图函数:tf.compat.v1.disable_v2_behavior
启用动态图函数:tf.compat.v1.enable_v2_behavior
动态图的原理及不足
在创建动态图的过程中,默认也建立一个会话。所有代码都在该会话中进行,而且该会话具有进程相同的生命周期。表示:当前程序中智能有一个会话,并且该会话一直处于打开状态,无法被关闭。
4. 什么是估算器框架接口(Estimators API)
估算器框架借口是TensorFlow中一种高级API。它提供了一整套训练模型、测试模型的准确率,以及生成预测的方法。
用户在估算器框架中开发模型,只需要实现对应的方法即可。整体的数据流搭建,全部交给估算器框架来做。估算器框架内部会自动实现:检查点文件的导出与恢复、保存TensorBoard的摘要、初始化变量、异常处理等操作
估算器框架的组成
估算器框架是在tf.layers接口上构建的。估算器框架可以分成三个主要部分:
- 输入函数:主要有tf.data.Dataset借口组成,可以分成训练输入函数(train_input_fn)和测试输入函数(eval_input_fn)。前者用于输出数据和训练数据,后者用于输出验证数据和测试数据。
- 模型函数:由模型(tf.layers借口)和监控模块(tf.metrics借口)组成,主要用来实现训练模型、测试(验证)模型、监控模型参数状况等功能。
- 估算器:将各个部分“粘合”起来,控制数据在模型中的流动与变换,并控制模型的各种运算。它类似计算机中的操作系统。
估算器中的预置模型
估算器框架除支持自定义模型外,还有一些封装好的常用模型,例如:基于线性的回归和分类模型(LinearRegressor、LinearClassifier)、基于深度神经网络的回归和分类模型(DNNRegressor、DNNClassifier)等。
基于估算器开发的高级模型
- TFTS:专门处理序列数据的通用框架
- TF-GAN:专门用于处理对抗神经网络的通用框架
5. 什么是tf.layers接口
tf.layers接口是一个与TF-slim接口类似的API,该接口的设计是与神经网络中的“层”的概念想匹配的。
例如,在用tf.layers接口开发含有多个卷积层、池化层的神经网络时,会针对每一成定义一个“tf.layers”开通的函数,然后将这些神经网络层依次连接起来。
tf.layers接口常用于动态图中,而TF-slim接口更多用于静态图中
6. 什么是tf.keras接口
tf.keras接口是TensorFlow中支持keras语法的高级API。它可以将用Keras语法实现的代码程序移植到TensorFlow上运行。
7. 什么是tf.js接口
8. 什么是TFLearn框架
9. 该选择哪种框架
- 对于网络单层的封装:TF-slim、tf.layers
- 对于处理框架的封装:Estimators、eager
- 对于框架及网络的整体封装:TFLearn、tf.keras
…还有待补充
最后
以上就是激情火为你收集整理的用TensorFlow编写训练模型的程序——快速导读的全部内容,希望文章能够帮你解决用TensorFlow编写训练模型的程序——快速导读所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复