机器学习-使用TensorFlow for Poets训练图像分类器

背景介绍

今天我们学习如何训练图像分类器,只需通过图像目录即可完成。比如说,你想要构建一个分类器来区分霸龙和三角龙的图片:

或者你想区分莫奈或毕加索的画:

为了做到以上功能我们需要使用一个代码实验室叫做TensorFlow for Poets,这是开始学习并且做图片分类相关工作一个的好方法。

现在有两件事需要完成:首先,这个代码实验室是非常高级的,为了训练我们的分类器我们只需要运行几个脚本,令人印象深刻的是分类器所创造的要比我们自己写的脚本好,之后会向你展示代码实验室,在运行状态时是什么样子的,会添加上下文和背景来解释为什么它这么好,让我们开始吧。要通过TensorFlow for Poets训练一个图像分类器,我们只需要提供一样东西 ——训练数据。也就是一个有很多图像的图像目录:

我的计划是创造一个可以区分五种不同的花的图片分类器,玫瑰、太阳花等等:

这就是我的训练数据,注意我有五个目录,每一种花都有一个目录,在每个目录中都有很多的图片:

我们用花来举例的原因是我们在编码实验室中提供了这组数据,因此你可以很快上手。如果你想使用你自己的图片比如关于恐龙的图片或者名画,你只需要创建一个目录把从网上找到的图片放在相应的目录中,每一个目录中都需要大约一百张图片:

我们有了训练数据后我们就可以开始训练分类器了,我们会使用TensorFlow来做这一步。TensorFlow是一个开源的机器学习库,在深度学习领域尤其强大,深度学习最近几年发展迅猛尤其在图像分类领域:

也就是我们今天所要做的事,之前的文章中我们讨论过如何区分苹果和橘子的不同,我们发现手动做这个工作是不可能的。因为世界上有太多不同的苹果和橘子,但现在我们也知道分类器把特征作为输入,我们很难用代码把有用的信息从图像中提取出来。

比如,你不会想去写一个可以探测一片水果质地的代码。为了解决这个问题我们使用深度学习,因为在图像处理方面它有巨大的优势,就是这个你不用手动提取特征,你可以使用像素图像的特征。分类器会解决其余问题,为了区分我们训练素材的不同,让我们把鸢尾花数据集和图像目录相比较在鸢尾花。数据集中每一列都描述花的一个特征,你可以想象我们是手动提取这些特征的,比如通过尺子来量花朵,相比之下,这是我们的训练数据。

在TensorFlow for Poets中这就是一个标记好的图片清单,图片分类器仅仅是一个函数f(x)=y在这里,x是一个2D的图像像素矩阵,y是玫瑰标签。当我们在说深度学习时,我们使用的分类器叫做神经网络:

高级层面上来讲这仅仅是另一个分类器。也就是跟上一次记录相比最接近的一次,区别在于神经网络可以学习很多复杂的函数,在这个编码实验室里TensorFlow for Poets会在幕后为你负责准备并训练神经网络,这并不意味着TensorFlow的编码要比我们目前所看到的更难写。我们要先运行这个脚本,在代码实验室里有所有的详细信息(文末附上链接地址),所以我在这里就不再赘述:

但我会对两件事交代一下背景,你也许会想知道,首先,脚本大约需要20分钟来训练分类器。现在你可以问自己这是很长的一段时间吗?当然不是很长,事实上TensorFlow for Poets并不是从零开始训练分类器,它是从一个现有的叫做Inception的分类器开始训练的,Inception是谷歌最好的图像分类器之一,并且它是开源的。

在我们的训练数据里有只有几千张图时,Inception已经通过了一千多种类,一百二十万张图片的训练了。训练Inception需要大约两周的时间在一个有八个绘图处理器的快速电脑上。在TensorFlow for Poets里我们以Inception为基础,然后使用一个叫做再次训练的功能来调试使其更好地分辨我们的图像。

也让我们重新定义Inception之前学习的一些参数,这样我们就可以用很少的训练数据创建一个高精准度的分类器,现在训练结束了:

当我们有了一个训练好的分类器后, 我们就可以测试它了。我会从网上下载这张玫瑰的图片:

使用我们的分类器来预测这是哪一种花。我们可以看到,答案正确,我们可以看到对可能是其它花的置信分布:

请记住,我们的分类器仅知道我们向它展示的图片,所以如果我们让它分类一个图片比如罗马角斗场:

它一定会说这是一种花。我们只能希望置信区间会很低了,现在让我再说一两点:训练一个图像分类器是一个多样性和数量的游戏。多样性来说,我们有更多不同玫瑰的图像,预测结果会更准确。比如说,我们的训练数据包含红,白,黄色的玫瑰,我们也有在不同角度拍摄的照片,比如从上方或者从旁侧,我们也有玫瑰作为前景或者是背景的图片。数量上来讲,我的意思是我们的训练数据越多我们就会创造更好的分类器。

在玫瑰文件夹中有几百张照片这用来再次训练Inception足够了。你可能可以用更少的图片不过准确度可能会降低。

TensorFlow for Poets代码实验室地址:

https://codelabs.developers.google.com/codelabs/tensorflow-for-poets

原文发布于微信公众号 - yale记(python_yale_learning)

原文发表时间:2019-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券