作者 | 金天
编辑 | Vincent
AI前线出品| ID:ai-front
AI 前线导语:“作者本人说,这将是 PaddlePaddle 系列教程的开篇,属于非官方教程。既然是非官方,自然会从一个使用者的角度出发,来教大家怎么用,会有哪些坑,以及如何上手并用到实际项目中去”。
本文首发在作者 GitHub:https://jinfagang.github.io,现由作者授权,AI 前线整理发布。
三行代码 PaddlePaddle 从入门到精通
PaddlePaddle 是百度大力推出的一个框架,不得不说相比于 tensorflow,PaddlePaddle 会简单很多,接下来我会细说。同时百度在人工智能方面的功底还是非常深厚,我曾经在腾讯实习,类似于 AT 这样的公司,甚至没有一个非常成型的框架存在。
既然是三行代码精通 PaddlePaddle,那么得安装一下 PaddlePaddle。就目前来说,最好的办法是 build from source。步骤如下 (注意,这里是 CPU 版本,GPU 版本的源码编译过程后续补充,我们先用 CPU 来熟悉 API):

好了,看上去应该算是安装完了。接下来我们用三行代码来测试一下?
PaddlePaddle 在 python API 上 0.10 有较大的变化,所以直接 import 一下 v2 版本的 API。如果可以说明 PaddlePaddle 安装没有问题。这里赞一下百度的技术功底和用户体验,这尼玛要是 caffe 或者 caffe2 编译出错概率 100% 不说,python 安装了也不能 import,PaddlePaddle 一步到位,非常牛逼。
闲话不多说,直接三行代码来熟悉一下 PaddlePaddle 的 API。
三行代码来了
接下来要做的事情是,用 PaddlePaddle 搭建一个 3 层 MLP 网络,跑一个二维的 numpy 随机数据,来了解一下 PaddlePaddle 从数据喂入到训练的整个 pipeline 吧。
首先我们这个教程先给大家展示一个图片分类器,用到的数据集是 Stanford Dogs 数据集, 下载链接, 大概 800M, 同时下载一下 annotations, 大概 21M。下载好了我们用一个 paddle_test 的文件夹来做这个教程吧。

把所有的 images 和 annotations 扔到 data 里面去,解压一下:

顺便说一下,这里的 annotations 是为后面用 paddlepaddle 做分割做准备,本次分类任务,只需要一个 images.tar 就可以了,所有图片被放在了该类别的文件夹下面,以后处理其他分类任务时,只需要把不同类别放在文件夹就 OK 了,甚至不用改代码,非常方便,这比 MXNet 要有道理很多,多数情况下我们根本不需要海量图片训练,也没有必要搞个什么 imrecord 的数据格式,MXNet 导入图片真心蛋疼,没有 Pytorch 方便,但是 Pytorch 得运行速度堪忧。
OK,将 images.tar 解压,会得到 120 个文件夹,也就是 120 个类别,每个类别里面都是一种狗狗图片。
我们现在要来处理一下这些蠢狗。
开始写三行代码
好了,开始写三行代码了.

实际上 PaddlePaddle 的使用也就是三行代码的事情,首先是网络构建,这里我们构建一个 VGG 网络,其次是 event 的处理函数,这个机制是 PaddlePaddle 独有的,PaddlePaddle 把所有的训练过程都包装成了一个 trainer,然后调用这个 event_handler 来处理比如打印 loss 信息这样的事情。OK,我们一步一步来,先来看一下 train 的过程把:


PaddlePaddle 的网络训练流程分为几个步骤:
1、首先定义网络,这里的网络不包括最后一层的 softmax;
2、创建一个 cost,cost 当然就需要一个网络的输出和 lable 了;
3、通过这个 cost 来创建网络训练的参数,非常简单明了;
4、最后是优化器,这里定义反向传播的正则项,学习速率调整策略等;
5、通过上面这些创建一个 trainer;
6、最后这个 trainer 要训练起来,还需要持续的数据喂入,时间处理函数,和喂入的方式。
接着我们看一下网络定义和事件处理函数:


这里我们先用 PaddlePaddle 内置的 cifar10 来测试一下能否训练起来,把上面的代码加上 import 之后:

在主函数里面运行 train()。见证奇迹的时刻到了。。
PaddlePaddle 开始下载数据,并打印出了网络结构!
so far so good,PaddlePaddle 开始训练网络!!!
牛逼了我的哥。接下来我们用这个代码来保存网络训练之后的权重:

最后,模型 train 好之后,导入模型进行预测:


OK, 本次列车到此结束,对于 PaddlePaddle 如何训练一个图片分类器,应该有了一个清醒的认识,下一步,我们将继续…. 用 PaddlePaddle 实现一个 NLP 情感分类器!
作者介绍
金天,清华大学在读研究生,深度学习领域研究者;热爱人工智能,以及电子硬件制作,是要成为钢铁侠的男人;欧曼信息科技有限公司 CEO,业余魔术师。
-全文完-
关注人工智能的落地实践,与企业一起探寻 AI 的边界,AICon 全球人工智能技术大会火热售票中,8 折倒计时一周抢票,详情点击:
《深入浅出TensorFlow》迷你书现已发布,关注公众号“AI前线”,ID:ai-front,回复关键字:TF,获取下载链接!

网友评论