Python+Tensorflow机器学习实战
上QQ阅读APP看书,第一时间看更新

2.4 第一个TensorFlow示例

前面介绍了TensorFlow的系统框架和特点,下面通过一个简单的程序来直观感受TensorFlow的编写和运行。

2.4.1 典型应用

前面章节中介绍了一些最基础的TensorFlow程序,但是TensorFlow本身被设计用于分析大量的数据,极少用于常数的计算。一个典型的TensorFlow程序需要进行的步骤可以分为以下四步:加载训练数据、构建训练模型、进行数据训练、评估和预测。

对于这四大步骤,在TensorFlow的具体编程过程中可以细分为如下流程。

1.加载训练数据

数据是机器学习处理的对象,加载训练数据是机器学习的第一步,可以细分为如下流程。

(1)生成或导入样本数据集

所有的机器学习都是对数据的处理,依赖于样本数据集。

(2)归一化数据

导入的样本数据各种各样,一般来说都不符合TensorFlow希望处理的数据样式,所以需要转换数据格式以满足TensorFlow。大部分机器学习算法希望的输入样本数据是归一化数据。在TensorFlow中有对应的归一化数据处理函数,例如:

  
     data= tf.nn.batch_norm_with_global_normalization()

(3)划分样本数据集为训练样本集和测试样本集

训练样本集用于机器学习过程中的模型训练,测试样本集用于对构建的机器学习模型进行测试。一般来说,这两个数据集包含不同的数据。

2.构建训练模型

构建训练模型是指构建TensorFlow中图的过程,涉及图中使用的所有变量以及运算规则,可以细分为如下流程。

(1)初始化超参数

在机器学习中经常要有一系列的常量参数,例如学习率、迭代次数或者其他固定参数,我们称之为超参数。一般情况下,我们会一次性初始化所有的机器学习参数,例如:

(2)初始化变量和占位符

机器学习的过程就是根据样本数据集不断优化权重值的过程。TensorFlow通过占位符设置数据节点,并在训练过程中调整这些变量的值。

TensorFlow中有常量节点、变量节点和占位符等,例如:

(3)定义模型结构

定义模型结构主要是针对数据设计或使用不同的机器学习算法,这部分也是我们后续讲解的重点,例如线性模型:

  
     y = tf.matmul(W、 x_data) + b

(4)定义损失函数

损失函数指定预测值与实际值之间的差距。损失函数可以是TensorFlow实现的常见损失函数,也可以是自定义的函数。常见的损失函数有Sigmoid交叉熵、Softmax交叉熵等,例如线性模型中自定义的损失函数:

3.进行数据训练

TensorFlow中的数据训练是指使用训练集中的数据,对设计的模型图进行计算的过程,可以细化为以下流程。

(1)初始化模型

初始化模型主要完成对计算图的运算环境的初始化,包括创建计算图实例、对占位符等进行赋值,例如:

(2)加载数据并进行训练

训练的过程就是从样本数据中提取数据并在计算图中计算的过程,例如:

4.评估和预测

评估和预测是对机器学习模型学习效果的评价。一般通过对训练样本集和测试样本集的评估,确定学习模型是过拟合还是欠拟合,调优后进行发布和预测新的未知数据,可以细化为以下流程。

(1)评估机器学习模型

对机器学习模型的评估主要有平均准确率、识别的时间和loss下降变化等指标。

(2)调优超参数

大部分时候,我们会不断调整机器学习模型的超参数来重复训练模型,以获得效果最佳的学习模型。

(3)预测结果

机器学习模型的最终目的是预测新的未知数据的结果。

在后面的章节中,将针对这些过程进行讲解,构建自己的机器学习模型。

2.4.2 运行TensorFlow示例

前面我们讲解了一个典型应用所要进行的步骤,接下来运行TensorFlow官方提供的一个示例。TensorFlow示例代码同样在GitHub中进行了开源,TensorFlow 1.3及之前的版本都存放在tensorflow目录的examples子目录中,1.4及之后的版本就存放在单独的目录中源代码地址为https://github.com/TensorFlow/models。。我们下载了与TensorFlow版本一致的示例代码版本。

在官方示例代码中,有一个对MNIST数据集进行处理的示例。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片,由美国国家标准与技术研究所(National Institute of Standards and Technology,NIST)提供,其训练集由250个不同人手写的数字构成,其中50%是高中学生,50%是人口普查局的工作人员。

下面以1.4版本的TensorFlow为例,讲解如何运行MINST的官方示例代码。

将下载的models文件解压,在其official\mnist目录下就是我们需要运行的代码。使用Spyder打开目录中的mnist.py文件。

直接运行该文件,会直接链接到https://storage.googleapis.com/cvdf-datasets/mnist/以下载运行所需的数据集。如果无法正常下载,可以手动链接到http://yann.lecun.com/exdb/mnist/,下载以下四个文件:

  
     t10k-images-idx3-ubyte.gz
     t10k-labels-idx1-ubyte.gz
     train-images-idx3-ubyte.gz
     train-labels-idx1-ubyte.gz

对于mnist.py文件也需要做相应的修改。一方面将数据来源修改为下载后保存到本地的地址,例如C:\mnist_data。另一方面,由于TensorFlow的可视化工具TensorBoard在Windows系统下有错误,因此只能正确读取C盘下的可视化文件,将过程记录文件也存储在C盘中,例如C:\log\mnist_model。对mnist.py的具体修改如下:

直接运行该文件,运行过程如图2.7所示。

图2.7 MNIST运行过程

在后续章节中将逐步讲解具体的代码实现。

为了更直观地看到TensorFlow的继续学习过程,TensorFlow自带了TensorBoard这一强大的可视化工具。针对该例,我们使用TensorBoard查看效果。

在Anaconda Prompt中启用TensorBoard,输入相应的命令,具体如下:

执行该命令后,就会出现正常启动的提醒信息,如下所示:

  
     TensorBoard 0.4.0 at h  ttp://USER-20151007LN:6006 (Press Ctrl+C to quit)

在浏览器中访问本地计算机的6006端口,例如http://USER-20151007LN:6006,就能成功打开TensorBoard界面,如图2.8所示。

图2.8 TensorBoard界面