作者 | 金天
編輯 | Vincent
AI前線出品| ID:ai-front
AI 前線導(dǎo)語(yǔ):“作者本人說(shuō)龄坪,這將是 PaddlePaddle 系列教程的開(kāi)篇,屬于非官方教程。既然是非官方芜茵,自然會(huì)從一個(gè)使用者的角度出發(fā),來(lái)教大家怎么用倡蝙,會(huì)有哪些坑九串,以及如何上手并用到實(shí)際項(xiàng)目中去”。
本文首發(fā)在作者 GitHub:https://jinfagang.github.io寺鸥,現(xiàn)由作者授權(quán)猪钮,AI 前線整理發(fā)布。
三行代碼 PaddlePaddle 從入門到精通
PaddlePaddle 是百度大力推出的一個(gè)框架胆建,不得不說(shuō)相比于 tensorflow烤低,PaddlePaddle 會(huì)簡(jiǎn)單很多,接下來(lái)我會(huì)細(xì)說(shuō)笆载。同時(shí)百度在人工智能方面的功底還是非常深厚扑馁,我曾經(jīng)在騰訊實(shí)習(xí)涯呻,類似于 AT 這樣的公司,甚至沒(méi)有一個(gè)非常成型的框架存在檐蚜。
既然是三行代碼精通 PaddlePaddle魄懂,那么得安裝一下 PaddlePaddle。就目前來(lái)說(shuō)闯第,最好的辦法是 build from source市栗。步驟如下 (注意,這里是 CPU 版本咳短,GPU 版本的源碼編譯過(guò)程后續(xù)補(bǔ)充填帽,我們先用 CPU 來(lái)熟悉 API):
好了,看上去應(yīng)該算是安裝完了咙好。接下來(lái)我們用三行代碼來(lái)測(cè)試一下?
PaddlePaddle 在 python API 上 0.10 有較大的變化篡腌,所以直接 import 一下 v2 版本的 API。如果可以說(shuō)明 PaddlePaddle 安裝沒(méi)有問(wèn)題勾效。這里贊一下百度的技術(shù)功底和用戶體驗(yàn)嘹悼,這尼瑪要是 caffe 或者 caffe2 編譯出錯(cuò)概率 100% 不說(shuō),python 安裝了也不能 import层宫,PaddlePaddle 一步到位杨伙,非常牛逼。
閑話不多說(shuō)萌腿,直接三行代碼來(lái)熟悉一下 PaddlePaddle 的 API限匣。
三行代碼來(lái)了
接下來(lái)要做的事情是,用 PaddlePaddle 搭建一個(gè) 3 層 MLP 網(wǎng)絡(luò)毁菱,跑一個(gè)二維的 numpy 隨機(jī)數(shù)據(jù)米死,來(lái)了解一下 PaddlePaddle 從數(shù)據(jù)喂入到訓(xùn)練的整個(gè) pipeline 吧。
首先我們這個(gè)教程先給大家展示一個(gè)圖片分類器贮庞,用到的數(shù)據(jù)集是 Stanford Dogs 數(shù)據(jù)集峦筒, 下載鏈接, 大概 800M, 同時(shí)下載一下 annotations, 大概 21M窗慎。下載好了我們用一個(gè) paddle_test 的文件夾來(lái)做這個(gè)教程吧勘天。
把所有的 images 和 annotations 扔到 data 里面去,解壓一下:
順便說(shuō)一下捉邢,這里的 annotations 是為后面用 paddlepaddle 做分割做準(zhǔn)備脯丝,本次分類任務(wù),只需要一個(gè) images.tar 就可以了伏伐,所有圖片被放在了該類別的文件夾下面宠进,以后處理其他分類任務(wù)時(shí),只需要把不同類別放在文件夾就 OK 了藐翎,甚至不用改代碼材蹬,非常方便实幕,這比 MXNet 要有道理很多,多數(shù)情況下我們根本不需要海量圖片訓(xùn)練堤器,也沒(méi)有必要搞個(gè)什么 imrecord 的數(shù)據(jù)格式昆庇,MXNet 導(dǎo)入圖片真心蛋疼,沒(méi)有 Pytorch 方便闸溃,但是 Pytorch 得運(yùn)行速度堪憂整吆。
OK,將 images.tar 解壓辉川,會(huì)得到 120 個(gè)文件夾表蝙,也就是 120 個(gè)類別,每個(gè)類別里面都是一種狗狗圖片乓旗。
我們現(xiàn)在要來(lái)處理一下這些蠢狗府蛇。
開(kāi)始寫三行代碼
好了,開(kāi)始寫三行代碼了.
實(shí)際上 PaddlePaddle 的使用也就是三行代碼的事情屿愚,首先是網(wǎng)絡(luò)構(gòu)建汇跨,這里我們構(gòu)建一個(gè) VGG 網(wǎng)絡(luò),其次是 event 的處理函數(shù)妆距,這個(gè)機(jī)制是 PaddlePaddle 獨(dú)有的穷遂,PaddlePaddle 把所有的訓(xùn)練過(guò)程都包裝成了一個(gè) trainer,然后調(diào)用這個(gè) event_handler 來(lái)處理比如打印 loss 信息這樣的事情毅厚。OK塞颁,我們一步一步來(lái)浦箱,先來(lái)看一下 train 的過(guò)程把:
PaddlePaddle 的網(wǎng)絡(luò)訓(xùn)練流程分為幾個(gè)步驟:
1吸耿、首先定義網(wǎng)絡(luò),這里的網(wǎng)絡(luò)不包括最后一層的 softmax酷窥;
2咽安、創(chuàng)建一個(gè) cost,cost 當(dāng)然就需要一個(gè)網(wǎng)絡(luò)的輸出和 lable 了蓬推;
3妆棒、通過(guò)這個(gè) cost 來(lái)創(chuàng)建網(wǎng)絡(luò)訓(xùn)練的參數(shù),非常簡(jiǎn)單明了沸伏;
4糕珊、最后是優(yōu)化器,這里定義反向傳播的正則項(xiàng)毅糟,學(xué)習(xí)速率調(diào)整策略等红选;
5、通過(guò)上面這些創(chuàng)建一個(gè) trainer姆另;
6喇肋、最后這個(gè) trainer 要訓(xùn)練起來(lái)坟乾,還需要持續(xù)的數(shù)據(jù)喂入,時(shí)間處理函數(shù)蝶防,和喂入的方式甚侣。
接著我們看一下網(wǎng)絡(luò)定義和事件處理函數(shù):
這里我們先用 PaddlePaddle 內(nèi)置的 cifar10 來(lái)測(cè)試一下能否訓(xùn)練起來(lái),把上面的代碼加上 import 之后:
在主函數(shù)里面運(yùn)行 train()间学。見(jiàn)證奇跡的時(shí)刻到了殷费。。
PaddlePaddle 開(kāi)始下載數(shù)據(jù)菱鸥,并打印出了網(wǎng)絡(luò)結(jié)構(gòu)宗兼!
so far so good,PaddlePaddle 開(kāi)始訓(xùn)練網(wǎng)絡(luò)5伞R笊堋!
牛逼了我的哥鹊漠。接下來(lái)我們用這個(gè)代碼來(lái)保存網(wǎng)絡(luò)訓(xùn)練之后的權(quán)重:
最后主到,模型 train 好之后,導(dǎo)入模型進(jìn)行預(yù)測(cè):
OK, 本次列車到此結(jié)束躯概,對(duì)于 PaddlePaddle 如何訓(xùn)練一個(gè)圖片分類器登钥,應(yīng)該有了一個(gè)清醒的認(rèn)識(shí),下一步娶靡,我們將繼續(xù)…. 用 PaddlePaddle 實(shí)現(xiàn)一個(gè) NLP 情感分類器牧牢!
作者介紹
金天,清華大學(xué)在讀研究生姿锭,深度學(xué)習(xí)領(lǐng)域研究者塔鳍;熱愛(ài)人工智能,以及電子硬件制作呻此,是要成為鋼鐵俠的男人轮纫;歐曼信息科技有限公司 CEO,業(yè)余魔術(shù)師焚鲜。
-全文完-
關(guān)注人工智能的落地實(shí)踐掌唾,與企業(yè)一起探尋 AI 的邊界,AICon 全球人工智能技術(shù)大會(huì)火熱售票中忿磅,8 折倒計(jì)時(shí)一周搶票糯彬,詳情點(diǎn)擊:
《深入淺出TensorFlow》迷你書(shū)現(xiàn)已發(fā)布,關(guān)注公眾號(hào)“AI前線”葱她,ID:ai-front撩扒,回復(fù)關(guān)鍵字:TF,獲取下載鏈接览效!