主页 AI/大数据 前沿洞察 【Maker玩AI】使用Google Colaboratory免费资源学AI

【Maker玩AI】使用Google Colaboratory免费资源学AI

AI人工智能这几年作为科技界的热门话题被媒体宣传的如火如荼。在这种氛围之下,身为创客的我们怎能错过展现好点子落地的大好时机呢?接下来就为大家介绍如何取得及应用免费的AI实验场域资源「Google Colaboratory」。

Google免费GPU资源Colaboratory

大家都说要玩AI先得准备个很贵的高级显卡及服务器才能跑得动,对于想入门练练手的人实在有点花不下去,就像想学开车的人不会先买一台法拉利,而是先去教练场学到一定程度后,再考虑一下预算及需求后才会依用途去买合适的跑车、房车、货车、代步车甚至是二手车。

现在阮囊羞涩的各位有福了,Google旗下的实验计划Colaboratory (以下简写为Colab)提供了免费的NVIDIA K80等级GPU资源及虚拟机(Xeon 2.2GHz CPU*2)供大家使用,其中整合了Linux (Ubuntu)环境、Python、Jupyter notebook及TensorFlow等常用套件包,并允许大家安装执行时所需套件包(如Keras、 OpenCV、PyTorch、MxNet、XGBoost等),只要有Google云端硬盘账号就可免费使用。

Google Colaboratory

当然不可避免地,这项免费资源并非毫无使用限制的,所提供的虚拟服务器,目前只提供至少50G储存空间和12GB(可用于训练约2GB)的内存,使用时间仅可连续12小时(包含安装软件套件包、数据下载到虚拟机及训练时间)。超过时间便会清掉使用中内容,有时还会因使用者过多造成连不上线或用到一半断线,并不适合用在太大的模型及数据集训练。

话虽如此,整体来说还是很方便家中没有Linux + Python环境或计算机(笔电)CPU等级太低或没有独立显卡的人及想学习人工智能的新手练习使用。

何谓影像二元分类

在知名HBO影集「硅谷群瞎传」第四季的第四集当中有个有趣的桥段,华人杨靖发明一款可拍照后辨识食物类型的APP叫「See Food」,展示时第一次拍热狗成功辨识,众人欢呼开始想象满桌子的食物若都能辨识出来的话,这款APP肯定大卖。接着再拍了披萨后众人等着APP回答「披萨」,可是APP却回答「不是热狗(Not Hotdog)」,众人瞬间傻眼,「这只能辨识热狗吗?」杨靖回答:「是」,众人大失所望、一哄而散。

然而,故事还没完呢!竟有一家创投看上这个APP,要他改成侦测色情图片中男生的小丁丁,这就是标准的「失之东隅,收之桑榆」。

虽然上面桥段的「Not Hotdog」只是虚构剧情,但现实中还真的人有把它实现出来,有兴趣的人可到Apple APP Store下载Not Hotdog 。从上面故事中我们可得知影像分类的重要性,虽然影像二元分类(是或不是)的用途较窄些,但若能大量(数千到数百万张)标注影像的分类,经过训练后可令影像精准地分类,那就有可能产生一些独特的商机。

Not Hotdog APP屏幕撷图

用Colab实现影像二元分类

为了让大家能快速上手,在此整理了一段完整的代码并有详尽的原理解说及批注,只要依着下列步骤就可快速建构出一个二元分类的影像分类系统,当然也包括如何用自定义的数据集进行训练及推论。代码主要包括以下四个主要步骤,另外还有更进一步的细节说明,如下所示。

1. 取得及建构训练数据(TrainingDataset)

下载数据集

数据集解压缩

检视数据集

自定义数据集及挂载

2. 建构一小型深度学习模型(TrainingModel)

卷积网络模型

输入图像尺寸正规化

模型架构及训练参数说明

模型配置及训练优化设定

数据预处理

3. 训练及验证模型准确度(ValidationAccuracy)

训练及验证模型

评估模型的准确性和损失

4. 应用深度学习训练成果进行推论(Inference)

推论

可视化表示

了解了相范例的学习目标后,可以至https://goo.gl/SqigfE下载image_classification.ipynb 到您的Google云端硬盘,双击后选择以「Colaboratory」开启,就可以开始享受Colab提供的免费GPU运算信息。执行时,请按【Shift+Enter】进行单步执行并自动跳至下一行;若想一次全部运行本范例所有代码,可按【Ctrl+F9】。接下来就简单为大家介绍主要步骤的工作内容。

建构数据集

为了练习「建构数据集」这个题目,我们首先必须要有数据集,但实在不容易在短时间内收集到数千张的影像,好在知名人工智能比赛平台Kaggle上有一个「Dogs and Cats」的影像分类比赛,它提供了大量的猫狗影像,以供测试「深度学习」算法(模型)的正确性。

Google为方便大家测试Colab,再将其减量到训练用影像猫狗各1000张,验证用影像猫狗各500张,其数据集样本大致上如下图所示。影像没并没有特定尺寸,猫狗在影像中占的面积比例、种类、色彩、数量、位置、明暗、遮蔽、背景复杂度也都没有限制。

Kaggle提供的「Dogs and Cats」数据集样本

卷积神经网络模型

这个范例中,主要利用TensorFlow及Keras建构出一个小型的卷积神经网络(Convolution Neural Network, CNN),共有三层卷积层(包含ReLu及Max Pooling),每个卷积层皆用3×3的滤波器进行卷积动作,三层分别提取16, 32及64组滤波器。接着展开成独立节点后,再加入二层全连结层,分别为512及1个节点,而最后得到的那一个节点加上Sigmodid函数即为最终输出的结果,合计共有9,494,561个参数待训练。

输出的结果值会介于0.0 ~ 1.0,当值越接近1.0时图片为狗的机率越高,反之输出值越接近0.0时图片判定是猫的机率越高。虽然这个模型虽然不大,但可适用各种图像的二元分类问题,大家可试着导入自己准备的图像进行测试。完整模型架构可参考下图。

卷积神经网络架构

训练及验证

下方图左为正确率,图右为损失率,横轴代表迭代次数,纵轴代表正确(或损失)率;蓝线代表训练集结果,而绿线代表验证集结果。从图中可看出蓝线在第十次正确率就已超过0.97(97%),而损失率已趋近0,但绿色的线正确率却没有继续变高,数值约接近0.7(70%),损失率反而逐渐增高。这表示训练过程已造成过拟合(over fitting)的状况,需要加入更多不同样态及更多数量的数据集再重新训练才能改善。

左:训练及验证准确性,右:训练及验证损失

推论结果

接着就可利用前面训练好的模型(model)来加以推论(或称为预测)。首先提供一张图片,并将图像数据正规化(150x150x3, Float32),接着进行推论,最后会得到图像分类结果分数,而分数越接近1.0则表示是狗的机率越高,反之越接近0.0则越可能是猫。我们可以另设几个自定义门坎值来区隔分类结果,比方说「这是狗」、「这可能是狗」、「这可能是猫」、「这是猫」等不同结果描述。

为了让大家更了解深度学习模型运作方式,将各层运作结果输出到特征图中,再逐一秀出。如下图,最上面为原始输入影像正规化后的结果图,再来才是真正导入输入层的信息,尺寸为150×150共有3组(RGB三通道)。

第一卷积层共产生16个特征图,conv2d_1尺寸为148×148,max_pooling2d_1尺寸为74×74;第二卷积层共产生32个特征图,conv2d_2尺寸为72×72,max_pooling_2为36×36;第三卷积层共产生64个特征图,conv2d_3尺寸为34×34,max_pooling_3为17×17;最后的全连结层(dense)则为单一节点信息,不易以图形方式表示,故忽略不处理。

从各层特征图中可看出,随着影像尺寸缩小其被激活的像素越来越少,甚至完全不输出(全黑),表示其特征已被某些卷积(滤波器)给凸显出来。对于我们所需的图像分类(辨识)能力也逐渐增强了。

推论结果可视化

结论

Google Colaboratory这项免费的云端GPU资源实在很方便刚入门的伙伴进行「深度学习」(一语双关),它不会因为个人计算机(笔电)的配备等级不同,而影响模型训练及推论的效能。同时,可轻易的分享代码给其它想学的人,对开源社群更是一大助力。希望不久的将来有更多伙伴能一起加入研究及分享,让更多人工智能的应用能加速落地。

完整代码及说明,请参阅Github.

作者:许哲豪

ChinaIT.com 网站文章仅限于提供更多信息,不代表本网站立场观点。如需转载,请注明来源 。转载之文章来源于互联网,如有版权问题,请与我们联系:content@it.test。

下载 ChinaIT.com APP,随时掌握最新IT资讯