机器学习零基础?手把手教你用TensorFlow搭建图像分类器

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

来源:雷锋网


Pete Warden是TensorFlow移动团队的技术负责人。曾在Jetpac担任首次技术官。Jetpac的深度学习技术经过优化,可在移动和嵌入式设备上运行。该公司已于2014年被谷歌收购。Pete还曾在苹果公司从事GPU优化领域的图像处理工作,并为O'Reilly撰写多本数据处理方面的书籍。本文为Pete Warden为一般大众撰写的“如何用TensorFlow构建图片分类器”(TensorFlow for poets,How to build your own image classifier with no coding),希望让不太懂机器学习专业知识的人也能享受到机器学习的益处。

刚开始着手研究深度学习时,我发现在这个领域真是难起步。可供参考的资料没有多少,就算有,也只有那些很懂行的学术研究员们才能看得懂。不过幸好,随着过去这几年指导深度学习的资料越来越多,入门已经不像过去那么高不可攀了。

我一直觉得,把EC2设计成连诗人也会用的形式,很不错。它让用户一步步利用基本的计算机知识,通过在平台上搭建一个简单的应用,以省去那些又难懂、又没必要的过程。不过到目前为止,我还没看到一个同样有大众化用户群体的深度学习平台。为此,我向大家展示了如何在不会电脑编程的情况下,用TensorFlow搭建一个属于自己图片分类器。以下是具体步骤(相关Youtube视频请进入链接 https://www.youtube.com/watch?v=h7xuEiZjqqo&feature=youtu.be):

第一步:安装Docker

为什么需要Docker呢?

让TensorFlow在OS X 上进行本地化运行应该是没什么问题。但是像Python这样的开发工具,安装时的标准化程度就没那么高,给出的指令不能统一适用。为了方便起见,我使用的是免费版Docker应用容器引擎,以便在 MacBook Pro.上安装Linux虚拟机( virtual machine)。Docker下载地址请见链接:https://docs.docker.com/engine/getstarted/step_one/

安装完成后是这样的:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

第二步:安装TensorFlow

安装并运行了Docker以后,我们可以得到一个预装TensorFlow的Linux虚拟机。然后:

1.下载能在Docker上应用的TensorFlow(下载地址:https://www.tensorflow.org/get_started/os_setup#docker-installation)

2.在终端机(treminal)上用下列指令使它能够正常运行(此过程下载和提取内容较多,可能会比较耗时):

            640?wx_fmt=png         

3.下载完成后,你会看到一个新的终端机,也就是你已经下载好的Linux 虚拟机。点击下述指令,确保安装成功。

 640?wx_fmt=png

4.现在,你能看到一系列目录,包括TensorFlow目录,***.build文件和其他,如下图所示:

 640?wx_fmt=png

第三步:优化Docker

Docker通常被用来测试网页应用。在运行这个功能时,计算性能无关紧要,所以虚拟机中处理器的运行速度不算快。但是在构建图片分类器这个案例中,计算机需要处理大量运算,因此,在这里我们必须优化一下Docker的计算速度。

Docker 内部使用VirtualBox驱动,所以,我们将用VirtualBox 的控制面板来管理设置。方法如下:

1.在你的Mac上找到VirtualBox应用并打开它,你会在面板左侧看到虚拟机。现在它应该处于default(系统默认值)。

2.右键点击“default”,在出现的菜单选择Close->ACPI Shutdown

3.关闭完成后,“default”下方会出现“Powered off”,再次点击右键,在出现的菜单中选择“Settings”。

4. 点击“System”图标,然后选择“Motherboard”选项卡。

5. 拖动“Base Memory”滑块到绿色部分。一般让它占笔记本电脑总内存的75%左右。我把它设置为12GB,我的电脑是16GB的。

6.点击“Processor”,把处理器数量设置为大于1。通常,在MacBook Pro上设置4比较好,不过用滑块下的绿色条作为参考也可以。

7.点击设置对话框上的“OK”,右键点击 “default”,选择“Start->Headless Start”。

8.再次运行下列指令:

640?wx_fmt=png

完成这一系列的操作后,虚拟机就可以借助计算机的计算能力,加快运转速度啦! 

第四步:下载图片

下面的步骤则基于TensorFlow的图形再训练案例(详情链接:https://www.tensorflow.org/versions/master/how_tos/image_retraining/)。

它展示了如何把你的图片分到不同目录的文件夹下,并再用它快速训练起始图片识别神经网络的顶层,以识别这些目录。

1.接下来,你需要得到一些案例照片。进入终端机中,如果你仍看到“root@…”提示,那么这说明你仍处在Linux虚拟机环境下。那么,你需要点击“exit”,退出虚拟机。

2.运行以下命令,在Downloads 目录中创建一个新文件夹以保存训练图像,并下载、提取花朵照片:

640?wx_fmt=png

3.完成之后,你会看到一个新的窗口,如下所示:

640?wx_fmt=png

这表明你已经成功下载花朵的案例图片。另外,你还可以在文件里换上其他种类的花或照片,然后把文件名改成对应名称。

第五步:在虚拟机上运行文件夹

1.有了可供训练的照片之后,你就可以在Linux上使用文件夹里使用它们了,以便把照片放到TensorFlow上:

 640?wx_fmt=png

2.出现一个Linux提示。为确保文件夹正常在虚拟机上共享,尝试下列指令:

640?wx_fmt=png

3.生成花朵文件夹列表,如下:

 640?wx_fmt=png

第六步:更新代码

本案例需要使用到最新的代码,并且以下会涉及到源代码控制程序git。

1.抽取代码需要一个默认邮箱地址:

640?wx_fmt=png

2.抽取最新资源:

640?wx_fmt=png

3.现在,你应该已经处在vim窗口下。点击“quit”离开。完成之后你就做的了最新的版本的代码。接下来,将它同步到一个可运行的版本中,运行下列命令:

 640?wx_fmt=png

第七步:编制代码

这一步的任务是编制代码。在指令中,你会发现有一些优化标记,它可以用AVX加快处理器的运行:

640?wx_fmt=png

编制代码可能会持续5-10分钟,此过程可能会弹出很多警告。不过不要担心,这是正常现象。 

第八步:运行代码

运行以下命令可运行重训练程序:

640?wx_fmt=png

接下来会出现下载初始模型的信息,然后是一长串创造瓶颈( bottlenecks)的信息。如果你想知道后台具体是怎么运行的,可以点击https://www.tensorflow.org/versions/master/how_tos/image_retraining/#bottlenecks。

我已经把default /tmp 目标改成了输出图像和shared /tf_files 中的已缓存瓶颈,这样从OS X中也可以获得最后结果,并保存在不同的虚拟机中。

瓶颈缓存完成后,就进入到照片训练过程。这可能要花费5min左右的时间。最后的输出线路精确值应该在90%左右,也就是说,如果有10张照片的话,你的图片分类器能把其中9张正确分类到其对应的文件夹中。

第九步:使用图片分类器

经过分类的图片被放在/tmp/output_graph.pb中。将它进行一下测试,那么你可以得到另外一份样本代码。label_image示例是一个小C ++程序,它可以加载图形并将其应用于用户提供的图像中。可以试试下面步骤:

640?wx_fmt=png

你会看到它已经能分辨出一张雏菊的照片了。因为训练过程是随机进行的,所以你的模型可能有时会出错,你可以再尝试一些其他图片,看看它的成绩如何。

 640?wx_fmt=jpeg

大功告成

是不是已经迫不及待想让它在你的应用里运行了呢?很简单,只需在 Downloads/tf_images 目录下创建一个新的文件夹,把你想训练的图片放在子文件夹里,然后重新运行分类器。

现在,在应用里运行它吧!把label_image示例作为模板,可以很清楚的看到是否可以将C ++集成到你的产品中,它甚至可以再移动设备上运行。

最后我希望本教程能够激发你的灵感,让你能够多思考怎样利用深度学习帮助用户获得更好的体验。感谢观看~

Via Oreily

640?wx_fmt=jpeg

阅读更多
换一批

没有更多推荐了,返回首页