序
這將是paddlepaddle系列教程的開篇,小生不才,得以給百度paddle運營大使撰寫這份paddlepaddle入門教程,當然是非官方的。既然是非官方,自然會從一個使用者的角度出發,來教大家怎么用,會有哪些坑,以及如何上手并用到實際項目中去。
我之前寫過一些關于tensorflow的教程,在我的簡書上可以找到,非常簡單基礎的一個教程,但是備受好評,因為國內實在是很難找到一個系列的關于這些深度學習框架的教程。因此在這里,我來給paddlepaddle也寫一個類似的教程,不復雜,三行代碼入門。
三行代碼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個類別,每個類別里面都是一種狗狗圖片。比如這張是一只 Beagle:

我們現在要來處理一下這些蠢狗。
開始寫三行代碼
好了,開始寫三行代碼了.

實際上paddle的使用也就是三行代碼的事情,首先是網絡構建,這里我們構建一個VGG網絡,其次是event的處理函數,這個機制是paddle獨有的,paddle把所有的訓練過程都包裝成了一個trainer,然后調用這個event_handler來處理比如打印loss信息這樣的事情。OK,我們一步一步來,先來看一下train的過程把:

paddle的網絡訓練流程分為幾個步驟:
首先定義網絡,這里的網絡不包括最后一層的softmax;
創建一個cost,cost當然就需要一個網絡的輸出和lable了;
通過這個cost來創建網絡訓練的參數,非常簡單明了;
最后是優化器,這里定義反向傳播的正則項,學習速率調整策略等;
通過上面這些創建一個trainer;
最后這個trainer要訓練起來,還需要持續的數據喂入,時間處理函數,和喂入的方式。
接著我們看一下網絡定義和事件處理函數:

這里我們先用paddle內置的cifar10來測試一下能否訓練起來,把上面的代碼加上import之后:

在主函數里面運行train()。見證奇跡的時刻到了。。
paddle開始下載數據,并打印出了網絡結構!

so far so good,paddle開始訓練網絡!!!
牛逼了我的哥。接下來我們用這個代碼來保存網絡訓練之后的權重:

最后,模型train好之后,導入模型進行預測:

OK,
本次列車到此結束,對于paddle如何訓練一個圖片分類器,應該有了一個清醒的認識,下一步,我們將繼續….用paddlepaddle實現一個NLP情感分類器!
本文由在當地較為英俊的男子金天大神原創,版權所有,歡迎轉載,