想运行TuriCreate,却没有苹果电脑,也没有Linux使用经验,怎么办?用上这款云端应用,让你免安装Python运行环境。一分钱不用花,以高性能GPU,轻松玩儿转深度学习。python
《如何用Python和深度神经网络识别图像?》一文发布后,收到了不少读者的留言。你们对从前印象中遥不可及的深度神经网络图片识别来了兴趣,都打算亲自动手,试用一下简单易用的TuriCreate框架。git
有的读者尝试以后,很开心。github
有的读者却遇到了问题:编程
我在《如何用Python和深度神经网络寻找近似图片?》一文中,对这个疑问作了回应——TuriCreate目前支持的操做系统有限,只包括以下选项:浏览器
若是你用的操做系统是Windows 7及如下版本,目前TuriCreate还不支持。安全
解决办法有两种:bash
第一种,升级到Windows 10,而且使用WSL。服务器
第二种,采用虚拟机安装好Linux。微信
这两种解决方法好很差?网络
很差。
它们都是没有办法的办法。
由于都须要用户接触到Linux这个新系统。
对于IT专业人士来讲,Linux确实是个好东西。
首先,它免费。所以能够把软硬件的综合使用成本降到最低;
其次,它灵活。从系统内核到各类应用,你均可以为所欲为定制。不像Windows或者macOS,管你用不用西班牙语和文本语音朗读功能,通通默认一股脑给你装上;
第三,它结实。Linux虽然免费,可是从创生出来就是以UNIX做为参考对象,彻底能够胜任运行在一年都不关机一回的大型服务器上。
可是,Linux这些优势,放到我专栏的主要阅读群体——“文科生”——那里,就不必定是什么好事儿了。
由于Linux的学习曲线,很陡峭。
因此,若是你执拗地坚持在本身的电脑上运行TuriCreate,又不肯意学Linux,那可能就得去买台Macbook了。
可是,谁说运行代码必定要在本身的机器上呢?
你能够把TuriCreate安装在云端——只要云端的主机是Linux就好。
你可能怒了,以为我是在戏耍你——我要是会用Linux,就直接本地安装了!本地的Linux我都不会用,还让我远程使用Linux?!你什么意思嘛?
别着急,听我把话说完。
云端的Linux主机,大可能是只给你提供个操做系统,你能够在上面自由安装软件,执行命令。
这样的云端系统,每每须要你具有至关程度的IT专业知识,才能轻松驾驭。
更要命的是,这种租用来的云主机,要么功能很弱,要么很贵。
那种几十块钱一个月的主机,每每只有一个CPU核心。跑深度学习项目?只怕你还没得到结果,别人的论文都发出来了。
有没有高性能主机?固然有。
例如亚马逊的AWS,就提供了p2.xlarge这样的配置供你选择。有了它,运行深度学习任务游刃有余。
可是它很贵。
有人计算过,若是你须要长期使用深度学习功能,仍是本地组装一台高性能电脑比较划算。
另外,虽然亚马逊已经帮你作了不少准备工做。你从开始折腾这台云主机到真正熟练掌握使用,仍是要花些功夫。
从网上找一篇靠谱的教程后,通过本身的反复实践,不断求助,最终你会掌握如下技能:
了解了如何最省钱地运行高配置AWS虚拟主机,知道该在什么时候启动和关闭实例。一个月下来,你看着帐单上的金额如此之少,会特别有成就感吧。
问题是,你最初是想要干什么来着?
你好像只是打算把手头的照片,利用TuriCreate上的卷积神经网络快速作个分类模型出来吧?
因此,这种折腾不是正道。
在某些时刻,作出正确的选择比盲目付出努力重要得多。
你应该选择一个云平台,它得具备以下特点:
你没必要会Linux,也不用从头装一堆基础软件。打开就能用,须要哪一个额外的功能,一条指令就搞定。提供高性能GPU用来运行深度学习代码……最好还免费。
你是否是以为我在作梦?犹豫着要不要赶忙喊我醒过来?
这不是作梦,真的有这样的好事儿。
本文推荐给你的云运行环境,是由Google提供的Colaboratory,下文简称Colab。
其实这个工具已经存在了好几年了。
最第一版本由Google和Jupyter团队合做开发。只是最近才迭代到渐入佳境的状态。通过这篇Medium文章的推广,吸引了不少研究者和学习者的关注。
官方的介绍是:
Colaboratory 是一款研究工具,用于进行机器学习培训和研究。它是一个 Jupyter 笔记本环境,不须要进行任何设置就可使用。
请用Google Chrome浏览器打开这个连接,你能够看到这份“Colaboratory简介”。
虽然外观不一样,可是它实际上就是一份Jupyter Notebook笔记本。
咱们尝试运行一下其中的语句。
注意这个笔记本里面的语句,实际上是Python 2格式。可是默认笔记本的运行环境,是Python 3。
因此,若是你直接执行第一句(依然是用Shift+Enter),会报错。
解决办法很是简单,打开上方工具栏中的“代码执行程序”标签页。
选择最下方的“更改运行时类型”。
将默认的Python 3改为Python 2以后,点击右下角的保存按钮。
而后咱们从新运行第一个代码区块的语句。此次就能正常输出了。
语句区块2就更有意思了。它直接调用Google自家的深度学习框架——tensorflow软件包。
我曾经专门为tensorflow的安装写过教程。可是在这里,你根本就没有安装tensorflow,它却实实在在为你工做了。
不只是tensorflow,许多经常使用的数据分析工具包,例如numpy, matplotlib都默认安装好了。
对于这些基础工具,你一律不须要安装、配置、管理,只要拿过来使用就行。
咱们运行最后一个代码单元。
看,图片输出都毫无问题。
编程环境领域的即插即用啊!太棒了!
但是兴奋事后,你可能以为不过如此——这些软件包,我本地机器都正确安装了。执行起来,再怎么说也是本地更方便一些啊。
没错。
可是安装TuriCreate时,你的Windows操做系统不支持,对不对?
下面我为你展现如何用Colab运行TuriCreate,进行深度学习。
我把须要分类的图像数据以及ipynb文件都放到了这个github项目中。请点击这个连接下载压缩包。
下载后解压到本地硬盘。
能够看到,其中包含一个ipynb文件和一个image目录。
image目录内容,就是你以前在《如何用Python和深度神经网络寻找近似图片?》一文中已经见过的哆啦a梦和瓦力的图片。
这是蓝胖子的图片:
这是瓦力的图片:
请用Google Chrome浏览器(目前Colab尚不支持其余浏览器)打开这个连接,开启你的Google Drive。
固然,若是你尚未Google帐号,须要注册一个,而后登陆使用。
下面,把你刚刚解压的那个文件夹拖拽到Google Drive的页面上,系统自动帮你上传。
上传完成后,在Google Drive里打开这个文件夹。
在demo_python_image_classification.ipynb
文件上单击鼠标右键。选择打开方式为Colaboratory。
Colab打开后的ipynb文件以下图所示。
咱们首先须要肯定运行环境。点击菜单栏里面的“修改”,选择其中的“笔记本设置”。
确认运行时类型为Python 2,硬件加速器为GPU。若是不是这样的设置,请修改。而后点击保存。
数据有了,环境也已配置好。下面咱们正式开始运行代码了。
咱们尝试读入TuriCreate软件包。
import turicreate as tc
复制代码
结果会有以下报错。
遇到这个报错很正常。
由于咱们还没有安装TuriCreate。
不是说不须要安装深度学习框架吗?
那得看是谁家的深度学习框架了。
Colab默认安装Tensorflow,由于它是Google自家开发的深度学习框架。
而TuriCreate是苹果的产品,因此须要我们手动安装。
手动安装很麻烦吗?
才不会。
新开一个代码单元,而后输入如下一行语句:
!pip install turicreate
复制代码
你就能够看到Colab帮你辛勤地安装TuriCreate以及所有依赖包了,根本不用本身操心。瞬间就安装好了。
咱们从新调用TuriCreate。
import turicreate as tc
复制代码
此次成功执行,再没有出现报错。
下面咱们须要作一件事情,就是让Colab能够从咱们的数据文件夹里面读取内容。
但是默认状态下,Colab根本就不知道咱们的数据文件夹在哪里——即使咱们原本就是从Google Drive的演示文件夹下面打开这个ipynb文件的。
咱们首先要让Colab找到Google Drive的根目录。
这本来是一个相对复杂的问题。可是好在咱们有现成的代码,能够拿来使用。
请执行下面这个单元格的代码。看不懂不要担忧。由于你不须要调整其中的任何语句。
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
复制代码
执行刚开始,你会看到下面的运行状态。
过了一小会儿,你会发现程序停了下来。给你一个连接,让你点击。而且嘱咐你把得到的结果填入下面的文本框。
点击连接,你会看到下图。
点击你本身的Google帐号。
而后会提示你Google Cloud SDK的权限请求。
点击容许后,你就得到了一长串字符了。复制它们。
回到Colab页面上,把这一长串字符粘贴进去,回车。
你可能认为运行完毕。不对,还须要第二步验证。
又出来了一个连接。
点击以后,仍是让你选择帐号。
而后Google Cloud SDK又提出了权限要求。注意和上次的请求权限数量不同。
你须要再复制另外的一串新字符。
粘贴回去,回车。此次终于执行完毕。
好了,如今Colab已经接管了你的Google Drive了。咱们给Google Drive云端硬盘的根目录起个名字,叫作drive。
!mkdir -p drive
!google-drive-ocamlfuse drive
复制代码
而后,咱们告诉Colab,请把咱们当前的工做目录设定为Google Drive下的demo-python-image-classification-Google-colab-master文件夹。
import os
os.chdir("drive/demo-python-image-classification-Google-colab-master/")
复制代码
好了,准备工做完毕,咱们继续。
咱们须要告诉TuriCreate,图像数据文件夹在哪里。
img_folder = 'image'
复制代码
而后,咱们读入所有图像文件到数据框data。
data = tc.image_analysis.load_images(img_folder, with_path=True)
复制代码
这里,你会发现读入速度比较慢。这确实是个问题,是不是由于TuriCreate的SFrame数据框在Colab上有些水土不服?目前我还不能肯定。
好在我们样例中的文件总数很少,还能接受。
终于读取完毕了。
咱们看看data中包含哪些数据吧。
data
复制代码
跟Jupyter Notebook本地运行结果一致,都是文件路径,以及图片的尺寸信息。
下面,咱们仍是给图片打标记。
来自哆啦a梦文件夹的,标记为doraemon;不然标记为walle。
data['label'] = data['path'].apply(lambda path: 'doraemon' if 'doraemon' in path else 'walle')
复制代码
再看看data数据框内容。
data
复制代码
可见,标记已经成功打好。
咱们尝试用explore()
函数浏览data数据框,查看图片。
data.explore()
复制代码
可是很不幸,TuriCreate提示咱们,该功能暂时只支持macOS.
别忘了,咱们如今使用的,是Linux操做系统,因此没法正常使用explore()
函数。不过这只是暂时的,未来说不定哪天就支持了。
幸亏,这个功能跟咱们的图像分类任务关系不大。咱们继续。
把数据分红训练集与测试集,咱们使用统一的随机种子取值,以保证我们得到的结果可重复验证。
train_data, test_data = data.random_split(0.8, seed=2)
复制代码
下面咱们正式创建而且训练模型。
model = tc.image_classifier.create(train_data, target='label')
复制代码
运行的时候,你会发现,本来须要很长时间进行的预训练模型参数下载,竟然瞬间就能完成。
这是怎么回事儿?做为思考题,留给你自行探索解答。给你一个小提示:云存储。
TuriCreate自动帮咱们处理了图像尺寸归一化,而且进行了多轮迭代,寻找合适的超参数设置结果。
好了,咱们尝试用训练集生成的模型,在测试集上面预测一番。
predictions = model.predict(test_data)
复制代码
预测结果如何?咱们用evaluate()
函数来作个检验。
metrics = model.evaluate(test_data)
print(metrics['accuracy'])
复制代码
结果以下:
0.935483870968
复制代码
咱们看看预测的结果:
predictions
复制代码
dtype: str
Rows: 31
['doraemon', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
复制代码
再看看实际的标记:
test_data['label']
复制代码
dtype: str
Rows: 31
['walle', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
复制代码
两相比对,咱们但愿找出那些错误预测的图片存储位置:
test_data[test_data['label'] != predictions]['path']
复制代码
下面咱们须要直观浏览一下预测错误的图像。
读入Jupyter的Image模块,用于展现图像。
from IPython.display import Image
复制代码
咱们先来展现第一幅图像:
Image(test_data[test_data['label'] != predictions]['path'][0])
复制代码
结果以下:
仍是老样子,50层的深度神经网络模型,已经没法让人直观理解。因此咱们没法确切查明到底是哪一个断定环节上出了问题。
然而直观猜想,咱们发如今整个照片里,方方正正的瓦力根本就不占主要位置。反却是圆头圆脑的机器人成了主角。这样一来,给图片造成了比较严重的噪声。
咱们再来看看另外一幅图:
Image(test_data[test_data['label'] != predictions]['path'][1])
复制代码
结果是这样的:
这幅图里面,一样存在大量的干扰信息,并且就连哆啦a梦也作了海盗cosplay。
好了,到这里,咱们的代码迁移到Colab工做顺利完成。
如你所见,咱们不须要在本地安装任何软件包。只用了一个浏览器和一个从github下载的文件夹,就完成了TuriCreate深度学习的(几乎)所有功能。
比起虚拟机安装Linux,或者本身设定云端Linux主机,是否是轻松多了呢?
经过阅读本文,但愿你已经掌握了如下知识点:
另外,请你在为需求选择工具的时候,记住哈佛大学营销学教授莱维特(Theodore Levitt)的那句经典名言:
人们其实不想买一个1/4英寸的钻头。他们只想要一个1/4英寸的洞。
这句话不只对学习者和开发者有用。
对于产品的提供者,意义只怕更为重大。
你以前正确安装了TuriCreate了吗?用的什么操做系统?你尝试过在云端运行Python代码吗?有没有比Colab更好的云端代码运行环境?欢迎留言,把你的经验和思考分享给你们,咱们一块儿交流讨论。
喜欢请点赞。还能够微信关注和置顶个人公众号“玉树芝兰”(nkwangshuyi)。
若是你对数据科学感兴趣,不妨阅读个人系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。