用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

…还有待补充

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的Scikit-Learn库提供了一个快速而灵活的框架,可以轻松地构建卷积神经网络(CNN)模型。要搭建一个CNN模型,我们需要遵循以下步骤: 1.准备数据:首先,我们需要加载和处理数据集。当前常用的是数据框架格式,可用Pandas处理,但如果需要使用TensorFlow中的Keras,那么就需要使用它的内置数据加载和预处理功能,来获得更高的效率。 2.构建模型结构:在此步骤中,我们可以选择使用Keras,定义CNN模型。在论文中,也可以引用LeNet或AlexNet这样的循环卷积网络结构。 3.编译模型:在此步骤中,我们需要定义损失函数、优化器和评估指标,以便用于训练模型。 4.训练模型:在此步骤中,我们将数据集喂给模型,通过调整参数来最小化损失函数进行迭代训练。 5.评估模型:完成训练后,我们需要评估模型的性能,看看它在新数据上的表现情况。可以采用交叉验证和测试集等方法评估模型。 6.预测数据:最后,我们可以使用训练好的模型来进行预测,在新数据集上进行推断。 在构建CNN模型时,需要特别注意调整超参数和模型架构,以便获得最佳性能。同时,也要注意过拟合和欠拟合问题,并采取相应的解决方案。 ### 回答2: Python中的sklearn库提供了许多机器学习算法的实现,包括卷积神经网络(CNN)。搭建CNN模型的基本步骤如下: 1.导入sklearn库中神经网络模块: ``` from sklearn.neural_network import MLPClassifier ``` 2.准备数据: CNN是一种非常适合处理图像的神经网络,因此在搭建CNN模型之前,需要准确地处理图像数据。可以使用numpy加载图片并将其转换为多维数组。通常可以使用OpenCV或Pillow等库来加载图片数据集。 3.定义模型: 使用MLPClassifier类来定义模型。MLPClassifier是多层神经网络的分类器。在此类中,包含许多参数,例如隐层层数、每层神经元数和激活函数等。 4.训练和测试模型: 定义好模型后,使用fit()方法对模型进行训练,使用predict()方法对模型进行测试。在训练和测试时,需要传递样本和标签数据。通常会将数据分成训练集和测试集。 5.评估模型: 完成模型训练和测试后,可以使用sklearn库中的准确率(accuracy)函数,对模型进行评估。 总之,使用sklearn库中的MLPClassifier类创建CNN模型,并将数据集用于训练和测试,最后通过准确率函数对模型进行评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值