我是靠谱客的博主 激情火,最近开发中收集的这篇文章主要介绍用TensorFlow编写训练模型的程序——快速导读,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 训练模型是怎么回事

训练模型是指,通过程序的反复迭代来修正神经网络中各个节点的值,从而实现具有一定拟合效果的算法。
在训练神经网络的过程中,数据流有两个方向:正向和反向。

  • 正向负责预测生成结果,沿着网络节点的运算方向一层层计算下去。
  • 反向负责优化调整模型参数,即用链式求导将误差和梯度从输出节点开始一层层传去,对每层的参数进行调整。

训练模型的完整步骤如下:

  1. 通过正向生成一个值,然后计算该值和真实标签之间的误差
  2. 利用反向求导的方式,将误差从网络的最后一层传到前一层
  3. 对前一层中的参数求偏导,并按照偏导结果方向和大小调整参数
  4. 通过循环的方式,重复上述步骤

2. 用“静态图”方式训练模型

了解静态图的操作方式

静态图的操作方式可以抽象成两种:构建模型和模型运行

  • 模型构建:正反两个方向构建模型
  • 模型运行:通过多次迭代的方式运行模型

在TensorFlow1.x版本中使用静态图

  • 定义操作符
  • 构建模型
  • 建立会话(调用tf.session之类的函数)
  • 在会话力运行张量流并输出结果

在TensorFlow2.x版本中使用静态图

由于静态图不是TensorFlow2.x中的默认工作模式,所以在使用时还需要注意两点:

  1. 在代码的最开始出,用tf.compat.v1.disable_v2_behavior函数关闭动态模式
  2. 将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编写训练模型的程序——快速导读所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部