Python算法學習與機器學習算法報導
編輯:Cookies
來源:AI科技大本營
剛接觸深度學習框架的同學可能會說
新入手一個框架是不是會很難?
NO,NO,NO
PaddlePaddle的宗旨就是「easy to use!」
PaddlePaddle是百度自研的集深度學習框架、工具組件和服務平臺為一體的技術領先、功能完備的開源深度學習平臺,有全面的官方支持的工業級應用模型,涵蓋自然語言處理、計算機視覺、推薦引擎等多個領域,並開放多個領先的預訓練中文模型。
下面,就讓作者帶你
打開一扇深度學習的新大門
19行代碼入門PaddlePaddle單機訓練!
第1行
在Python環境下安裝PaddlePaddle框架,萬裡徵程開頭難,輸完這行指令,你已經成功了一大半!
第2-3行
進入代碼環境,導入數據包,沒啥可說的
import paddle as paddleimport paddle.fluid as fluid第4-7行
定義模型,定義輸入輸出,輕鬆搞定
image = fluid.layers.data(name='image', shape=[1, 28, 28], dtype='float32') label = fluid.layers.data(name='label', shape=[1], dtype='int64') hidden = fluid.layers.fc(input=image, size=100, act='relu')prediction = fluid.layers.fc(input=hidden, size=10, act='softmax')
第8-10行
定義損失函數(交叉熵)和準確率函數
cost = fluid.layers.cross_entropy(input=prediction, label=label)avgcost = fluid.layers.mean(cost)acc = fluid.layers.accuracy(input=prediction, label=label)第11-12行
定義優化方法,使用Adam算法進行優化,其實隨便什麼優化方法都可以,隨你喜歡啦
optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.001) opts = optimizer.minimize(avg_cost)第13-14行
在模型結構搭建完之後,我們需要對參數進行初始化。
註:我們這裡採用CPU單機單卡訓練,如果使用多GPU訓練,參數需要先在GPU0上初始化,再經由fluid.ParallelExecutor 分發到多張顯卡(詳細內容可以參考文末連結)
exe = fluid.Executor(fluid.CPUPlace())exe.run(fluid.default_startup_program())第15-16行
準備輸入訓練數據,使用框架自帶MNIST數據集
train_reader = paddle.batch(paddle.dataset.mnist.train(), batch_size=128)feeder = fluid.DataFeeder(place=fluid.CPUPlace(), feed_list=[image, label])第17-18行
啦啦啦,開始訓練,2行代碼輕鬆搞定
for batch_id, data in enumerate(train_reader()):train_cost,train_acc = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost, acc])有興趣的同學也可以通過增加代碼print('Batch:%d, Cost:%0.5f, Accuracy:%0.5f' %(batch_id, train_cost[0], train_acc[0]))自行把訓練過程列印出來看一下
Batch:0, Cost:3.17834, Accuracy:0.04688Batch:50, Cost:0.53703, Accuracy:0.82031Batch:100, Cost:0.47778, Accuracy:0.83594Batch:150, Cost:0.34092, Accuracy:0.90625Batch:200, Cost:0.25703, Accuracy:0.92188Batch:250, Cost:0.37539, Accuracy:0.86719Batch:300, Cost:0.24384, Accuracy:0.94531Batch:350, Cost:0.51838, Accuracy:0.84375Batch:400, Cost:0.40187, Accuracy:0.85938Batch:450, Cost:0.36615, Accuracy:0.89062第19行
訓練完成,保存模型,任務完成!
fluid.io.save_inference_model("model", ['image'], [prediction], exe)好吧,看到這裡你說,
是19行代碼就完成單機訓練
沒錯,
但是完全沒感覺啊,
訓練好了該怎麼用呢?
不著急,我們試試拿一個實例
來測試一下!
預測實例
繼續導入2個基礎數據包,備用
import numpy as npimport pickle加載預測數據,需要下載源項目文件
連結:https://pan.baidu.com/s/1axSjJ9XVTI7MYY25WpqZtg
提取碼:rkhg
對,我們需要對付的,
就是這樣歪歪扭扭的傢伙!
源項目中已經把圖片處理好了保存在bin文件裡面,可以直接讀取
load_file=open("save.bin","rb")img=pickle.load(load_file)act_label=pickle.load(load_file)load_file.close()導入訓練好的模型,開始預測
with fluid.scope_guard(fluid.core.Scope()): [infer_prog,feed_names,targets]= fluid.io.load_inference_model("model", exe) results = exe.run(program=infer_prog, feed={feed_names[0]: img}, fetch_list=targets)列印輸出,搞定!
print("實際數字為: %d" % act_label)print("預測結果為: %d" % np.argsort(results)[0][0][-1])最終結果
實際數字為: 3
預測結果為: 3
DuangDuangDuang!!
除去數據準備和列印輸出,
真正的核心預測代碼也只有3行而已,
驚不驚喜,意不意外?
是的,沒錯
PaddlePaddle就是這樣
一個易學易用的深度學習框架
你學會了麼?