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

AI科技评论按: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),希望让不太懂机器学习专业知识的人也能享受到机器学习的益处。以下为AI科技评论编译。

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

我一直觉得,把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/。

安装完成后是这样的:

第二步:安装TensorFlow

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

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

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

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

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

第三步:优化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.再次运行下列指令:

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

第四步:下载图片

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

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

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

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

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

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

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

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

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

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

第六步:更新代码

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

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

2.抽取最新资源:

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

第七步:编制代码

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

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

第八步:运行代码

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

接下来会出现下载初始模型的信息,然后是一长串创造瓶颈( 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 ++程序,它可以加载图形并将其应用于用户提供的图像中。可以试试下面步骤:

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

大功告成

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

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

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

Via Oreily

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-02-10

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

基于Python的人脸识别库,离线识别率高达99.38%!

-欢迎 原文该项目是要构建一款免费、开源、实时、离线的网络 app,支持组织者使用人脸识别技术或二维码识别所有受邀人员。有了世界上最简单的人脸识别库,使用 Py...

2978
来自专栏数据小魔方

细分饼图

今天跟大家分享的是一种叫做细分饼图的图表制作技巧! 它所用到的技巧很简单,表达的数据也不很复杂,就是三层数据结构,每一层都是上一层的细分数据。 首先我们还是来看...

3605
来自专栏量子位

MIT研究人员发明漏洞修复系统,可自动给代码打补丁 | 附论文

安妮 编译自 MIT News 量子位 出品 | 公众号 QbitAI 点开许久不用的“XX旅行”,你想买张回家的车票。页面上弹出的升级提示写着: 本次升级将修...

3147
来自专栏机器之心

业界 | 谷歌发布机器学习工具库Kubeflow:可提供最佳OSS解决方案

选自GitHub 机器之心编译 Kubeflow 是谷歌发布的一个机器学习工具库,致力于使运行在 Kubernetes 上的机器学习变的更轻松、便捷和可扩展;K...

2824
来自专栏腾讯技术工程官方号的专栏

数平精准推荐 | OCR技术之系统篇

8875
来自专栏PHP实战技术

手把手教你玩转12306验证码的秘密!

12306相信对很多小伙伴都不陌生,假如问你对这个网站的印象的时候,你不是会立即想起那个坑爹的验证码,而正是这个验证码,也一时间成为小伙伴们讨论的话题,今天思梦...

2808
来自专栏杨建荣的学习笔记

通过图表分析oracle的parallel性能(r2第37天)

并行特性在数据库里对于性能的提升很有帮助,尤其是大批量的数据处理。今天对于并行的性能情况进行了简单的图表分析。 为了能够比较合理的比较数据,对数据库里的2张大...

3075
来自专栏HBStream流媒体与音视频技术

MP4文件格式的解析,以及MP4文件的分割算法

1.2K12
来自专栏我的小碗汤

推荐一款提高效率的工具

在工作中经常会遇到PDF转Word等可编辑文本情况,相信很多小伙伴用的是文字一个一个打,图片一个一个截的笨办法了。今天小编也和大家一样,准备这样搞,但是篇幅实在...

1613
来自专栏机器之心

我的深度学习开发环境详解:TensorFlow + Docker + PyCharm等,你的呢(附问卷)

选自Upflow.co 作者:Killian 机器之心编译 参与:Nurhachu Null、李亚洲 在这篇文章中,研究员 Killian 介绍了自己的深度学习...

6756

扫码关注云+社区

领取腾讯云代金券