开发 | 机器学习零基础?手把手教你用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 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4768
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5506
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6908
来自专栏杨龙飞前端

scrollto 到指定位置

2514
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2576
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4687

扫码关注云+社区