开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:TensorFlow 实现图像分类】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14236
TensorFlow 实现图像分类
内容介绍:
一、深度学习基础的概念
二、深度学习架构简单介绍
三、讲解图片分类的案例(数据集的组成以及部分代码的解析)
四、通过 PAI 在实验环境中实现实验
机器学习业务实践之路,主要为深度学习的基础概念另外会借助 PAI 上的 TensorFlow 框架实现图片分类。
一、深度学习基础的概念
什么是深度学习?深度学习也是近年来比较火热的话题。
深度学习和机器的学习区别:深度学习是机器学习的分支,深度学习的网路结构比较深,层次比较多
上图:是一个对于图片 CNN 网络分析的架构。深度学习会分很多的层次,这些层次都叫隐层。左面是输入层,右面是输出层。
这些层次少则3-4层,多则可能是成百上千层。这样深度的层次是深度学习的特点,也是和常规机器学习算法的区别。
深度学习的另一个特点是对于数据可以从低维度的特征逐渐抽象到高纬度。就像人类对于图片、语音的认知过程。
抽象的过程:首先数据输入是这样的一个像素,会先把像素抽样成边缘拐角的小卫星,从边角关系再抽象成一些面。例如人的侧脸、上颚、眼睛等属性。又通过面的属性拼接出最后要识别的东西。比如:人脸。这样就完成了一个从低层次的特征到高层次的抽象过程。
基于这样从低维度特征到高层特征抽样的能力是深度学习解决一些复杂特征的数据方面会很有优势。这些复杂特征的数据主要是非结构化数据。包括语音、视觉、图像、文本,所以基于深度学习的发展,现在人类在语言、图像、文本的分析等领域不断的取得更大的突破。
二、深度学习架构简单介绍
阿里云平台 PAI 内置的几种深度学习框架,现在已经内置了三种:
1、TensorFlow(谷歌开源的一种,现在已经是深度学习比较主流的一款框架)
2、caffe 主要是基于图像的处理
3、MXnet
基于以上三个深度学习框架,底层是 NVIDIA TESLA M40 GPU ACCELERATOR 这样的计算引擎。同时也支持多卡的训练。也就是说用户在使用 PAI 的时候不用关心底层资源,只要基于以上三种内置灌入数据将自己的执行代码文件传到平台上就可以对底层的计算资源进行动态灵活的调动。
三、讲解图片分类的案例
以上了深度学习的基础的概念,还有 PAI 内置的基本框架。接下来介绍本次案例的数据集。
CIRAR-10数据集,被标记成数据种类。目前的案例是监督学习,需要在训练的时候对每个图片进行打标,比如上图的图片分为10个种类,分别是10种动物和物品。例如 ship 一栏在输入数据的时候需要把每个 ship 图片在统一的打标文件中进行打标。可能有一个数字标号是9。另外对于 dog、cat、bird 都要进行打标并且有相关类别的编号。
每一个图片都是32*32的像素的,一共有6万张样本。其中训练集是5万张,测试集是1万张。上例使用的框架是TensorFlow,是基于 TensorFlow 的 TFlearn 的一个库进行的实验。
四、通过 PAI 在实验环境中实现实验
下面看如何编写代码
上图是一个训练代码,先看右图。首先通过代码构建出CN的网络(就像开篇的第一张图,每一层都是一个准基层,还有池化层、全连接层在代码中都有体现),con-2d 就是一个准基层,max-poo 就是一个池化层。Fully 是全连接层。这样就完成了 CN 网络的搭建。
同时在模型训练的时候,讲的是迭代次数,通过这个参数的限制可以调整模型的迭代。
在使用 PAI 的时候还有需要注意的是在数据的 IO 接口方面,要将数据源在 PAI 中是底层的数据和代码是存储在OSS,OSS 是阿里云的一款数据存储工具,现在通过 FLAGS.BUCKETS(OSS 中的一个存储单元的名称)通过上面的函数映射到 OSS 里面的 BUCKETS。
前面讲了训练的代码包括整个网络的搭建、存储数据的映射、迭代的次数。之后会生成一个 MODE,会存储在OSS里。
在预测代码中(上图截取了预测代码的一部分)会把训练过程中生成的 mode 传到系统内。之后对预测集进行预测,这里的预测集是一个图片,最终得到的结论会返回,this is the bird。上述系统已经在 PAI 的环境中搭建已经跑通了。进入 PAI 的环境看以下如何实现图片分类功能。
如何开通 KPU 以及深度学习。
没有开通深度学习的是没有办法使用平台内的组件的。一进入 PAI 的页面就会先进到控制台,只要点击开通CPU会在后台默认分配 CPU 资源。进入机器学习 PAI 就可以使用相关的学习框架。这一部分是计算层面的开通,同时在存储层面需要进入阿里云的存储 OSS,开通存储工具。新建 BUCKETS,目前只支持华东二的 BUCKETS。点击文件夹就可以选择训练数据、训练样本、预测样本:
下图是拼接的一个符号的实验:
左分支是训练模型,右分支是基于模型的预测。
首先将训练数据以及执行代码全部上传到 OSS 里,在代码文件中选择训练代码 ty,点击确定,选择训练数据源。训练数据源是存在于下图的文件夹下:
需要指定一个输出目录,输出目录是用来存储输出的 MODE 的。将这三个参数设置成功之后就可以开始训练了。在训练的时候可以点击查看日志。这三个参数就映射到了 pai 命令里。
在命令里以 python 代码为例,它就会对应到 OSS 的路径下。在后台的计算框架就通过这样的路径去moo执行代码。以上就是对应的 PAI 的文件目录。会到指定的 OSS 目录下去拉训练代码。拉起之后可以通过去查看它的训练情况。
双击这一行,然后双击 taste 到 STDout 这里,就可以看到不停的算法训练生成模型中不同的迭代生成的日志。
包括每一次迭代生成的 mouth,迭代到第几的次数,就可以通过代码中的数值进行修改。
有了 MODE 就可以进行预测,预测也是同样的逻辑,指定预测的代码。指定预测集就是那张鸟的图片。指定一个预测结果的输出目录。同样可以通过查看日志看一下数据结果。所有的 python 代码 print 的日志结果都可以查看。这个只是一个14内场景最终的结果会是一个矩阵。这个矩阵每个上面会对应一个分类,比如第三个就对应着一个鸟。如果第三个的数值最大就表示预测结果是一只鸟。这样就完成了训练和预测的过程。
补充PAI上深度学习的功能。可以在代码生成中指定生成 tenstoart。如果代码中有 tenstoart,点击之后就会自动弹出页面查看训练过程中 tenstoart 的变化。同时也可以在右侧指定 GPU 的卡数,是支持多机的,以 tenthfloat为例,可以指定两 个 GPU 来进行并行的训练。这样就完成了图片分类的实验。这样的图片的分类实验大概需要半个小时的训练才可以生成模型。
推荐学习材料:《机器学习实践》,《统计学习方法》,吴恩达的机器学习相关课程。
推荐实验环境:机器学习 API:https://data.aliyun.com/product/learn
案例数据下载:https://help.aliyun.com/document_detail/51800.html
关于实验的案例和代码的下载可以通过案例数据下载的链接来找到OSS以及深度学习相关的用法也可以在机器学习PAI里面的帮助文档内看。