2015/7/13 下午12:06:19 星期一
当前位置: 主页 > 平步青云 >

【谷歌 TensorFlow 专题】机器学365体育网投: 习 | 更进一步,用评估器给花卉分类
时间:2019-05-31 19:42

摘要: 本文转载自知乎专栏- 机智如你机器学习总的来说还是非常赞的(当然,除了某些时候你不得不对付复杂恼人的数学运算)。当下机器学习相关工具已经得到很大的改善,并且训练模型从未像今天这样简单。我们将利用对数据集的认知来编写洞察数据的模型,而不是基于对原始数学问题的理解。这一期,我们将会用一些趁手的代码来实操训练出

 本文转载自知乎专栏 - 机智如你

机器学习总的来说还是非常赞的(当然,除了某些时候你不得不对付复杂恼人的数学运算)。当下机器学习相关工具已经得到很大的改善,并且训练模型从未像今天这样简单。

我们将利用对数据集的认知来编写洞察数据的模型,而不是基于对原始数学问题的理解。

这一期,我们将会用一些趁手的代码来实操训练出一个简单的分类程序,所用到的程序可以在这个 GitHub Gist 当中得到:AIA003_tf_estimators.ipynb hosted with ❤  by GitHub

TensorFlow 中专门解决机器学习问题的评估器

要训练我们的分类模型,我们会使用 Google 的开源机器学习库— TensorFlow。TensorFlow 对外暴露了非常丰富的 API 接口,但是我们要使用的仅仅是一些高层次 API,也就是评估器(Estimator)。

评估器替我们打包好了训练的循环过程,365娱乐场体育投注,所以我们可以通过配置评估器来训练模型,而不是手动码出训练循环。这消耗了大量的样板,使我们能够在更高级的抽象中考虑问题。同时这也意味着我们可以享受机器学习中充满趣味的部分,而不是纠结实现的细节。

既然我们目前仅仅讨论过线性模型的设计,那我们就此打住。今后我们会有机会重新来讨论这个问题,并提升其识别能力。

花卉分类:是否和酒水判别同样充满趣味?

这周我们会构建一个模型来区分三种非常相似的花卉。虽说这次比不上上次那样同酒水打交道那么令人向往,但是由于花卉更难辨认,所以这次的任务会更具挑战性。

特别是我们今天需要区分开不同品种的鸢尾花。目前我不太确定自己能不能从一片玫瑰当中找出一枝鸢尾花,但是我们的模型将会准确认出山鸢尾、变色鸢尾和维吉尼亚鸢尾。

山鸢尾、变色鸢尾和维吉尼亚鸢尾

我们有一个数据集(如下图)记录了花卉的花瓣、萼片的宽高数据。表中的四列也就是之前提到的「特征」。

载入数据

在引入 TensorFlow and NumPy 之后,我们需要使用 TensorFlow 的 load_csv_with_header 函数来加载数据集。这些数据(或者说特征),都以浮点数的形式呈现,而每一列数据、目标花卉的标记则用 0、1 和 2 来表示,与三种花卉的品类相对应。

我已经将加载数据的结果输出出来,现在我们可以通过命名属性来取得训练数据和相关的标记、目标。

构建模型

下一步我们需要构建模型了。为了完成这一步操作,首先需要设定特征列。特征列定义了进入模型当中的数据类型。我们使用四个维度的特征列来表示数据集中的特征,并将之称为「花卉特征」。

搞定评估器非常简单。 我们通过传入特征列、模型预测的输出数量(此处为 3)和指定的用于存储模型训练进程及输出结果的目录来调用 tf.estimator.LinearClassifier 就能实例化模型了。这些操作让 TensorFlow 从上次中断的地方继续进行。

输入函数

上述的 classifier 对象会为我们记录状态,并且此时我们差不多可以开始训练了。胜利在望,我们的模型距离成功连接训练数据仅仅只差一个输入函数。输入函数的主要工作是创建一个可以为模型生成数据的 TensorFlow 操作。

现在,所以我们已经完成了从处理原始数据,到创建输入函数(传入之后会以特征列来映射的数据)的过程。要注意的是我们使用与元数据中同样的特征列名称作为特征值的标记,这样数据与模型训练才能对应起来。

开始训练

接下来开展训练工作。只需将输入函数传入 classifier.train() 方法就可以了。这就是我们将数据与模型联系起来的操作。

训练函数会控制在数据集上循环或迭代的过程,同时在每一阶中不断提升自身性能。正如我们所料,下图中我们已经成功完成了 1000 个阶的训练!我们的数据集并不算大,所以这个过程非常快。

精确度评估

好啦,是时候评估结果了。由于前面的 classifier 对象保存了模型训练的状态,所以我们此处仍然使用同一个对象来评估。要评估模型的优劣,我们通过调用 classifier.evaluate() 并传入测试数据,然后从返回的矩阵当中提取出精确度数据即可。

我们得到的精确度是 96.88%,厉害了我的哥!

评估器:一路向前的流水线

我们这周就先到这里,并且一起回顾学习评估器的收获。

评估器 API 为我们提供了一个优秀的流水线用于获取元数据、传入输入函数、设定特征列和模型结构、运行训练过程和进行预测。这个便于理解的框架让我们能够关注数据和他们的属性,而不需要一直纠结数学上的问题,实在是赞!