PaddlePaddle 極簡入門實踐二:簡單的線性迴歸
今天看見鄰居家的小朋友在做數學題
整頁題目千篇一律
什麼叫千篇一律?
整個頁面就像格式化輸出+random引數生成的一樣
小時候就很頭疼這種作業
少題怡情,多題傷身
小時候因為做作業而失去了快樂
想想就生氣!
那麼多的題,最終變成了我心中的怒火
我決定了,要讓機器替我寫
那就先從深度學習入手吧!

流程簡介

1、準備工作
開啟官方文件 http://paddlepaddle.org/documentation/docs/zh/1.3/beginners_guide/index.html
開啟Python專案
2、新建py檔案並載入庫

首先匯入最重要的兩個庫
import paddle.fluid as fluid import numpy
3、定義資料
小學的加減乘除計算題是我最頭疼的,先從這種題目入手吧
那麼...
你總得有個題目對吧
那麼就來個簡單的計算題?
例如:隨機數(a)乘10+3=[象徵的留幾個空格]
(a=1,1x10+3=13)
(a=233,233x10+3=2333)
......
然後格式化輸出並列印在A4紙上就是簡單的小學計算題了...
#定義資料 datatype="float32" train_data=numpy.array([[1],[2],[3],[44],[516],[103]]).astype(datatype)#10倍縮放 此處資料型別儘可能與網格型別相似 y_true = numpy.array([[10],[20],[30],[440],[5160],[1030]]).astype(datatype)
此處的 train_data
是假裝隨機的幾個“隨機數”a,
y_ture
則是題目的答案
要讓機器學習,首先得讓他明白什麼是對的才可以進行
(當然,你給它錯的答案也是可以的 會不會跳起來捶你膝蓋我就不知道了)
這裡的資料型別均為float32,具體PaddlePaddle支援什麼樣的資料型別可以參考PaddlePaddle最新的文件
4、定義網路
#定義網路 x = fluid.layers.data(name="x",shape=[1],dtype=datatype)#制定輸入規則 y = fluid.layers.data(name="y",shape=[1],dtype=datatype)#制定答案規則 y_predict = fluid.layers.fc(input=x,size=1,act=None)#定義一個層 用於聯絡x和y
這裡的 layer.data
使用了3個引數,第一個為定義的名字,第二個是定義的型別,此處的[1]則為一維資料。
舉一反三!圖片的型別可以定義為[3,30,30]類似的三維資料型別
至於第三個dtype則為該資料的資料的值型別,此處的datatype為定義資料時的變數datatype="float32"(這個變數名已經賦值了哦)
5、定義損失函式和優化方法
#定義損失函式 cost = fluid.layers.square_error_cost(input=y_predict,label=y)#平方差損失函式 avg_cost = fluid.layers.mean(cost)#求平均損失 #定義優化方法 sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.01)#定義SGD-隨機梯度下降的學習率 sgd_optimizer.minimize(avg_cost)
定義損失函式和優化方法是為了讓機器知道它的成績如何,接下來該怎樣努力
SGD是隨機梯度下降,關於學習率的大小,越小則越精細,當然也會越慢
6、定義訓練環境
cpu = fluid.CPUPlace()#此處使用CPU進行訓練 GPU訓練則移步之後更新的文章 exe = fluid.Executor(cpu)#Executor是執行器 prog=fluid.default_startup_program()#將剛剛定義的一堆堆賦值給prog這個變數名 exe.run(prog)#準備開始!
7、組建迴圈,開始訓練
for i in range(500): outs = exe.run( feed={'x':train_data,'y':y_true},#feed為資料表 輸入資料和標籤資料 fetch_list=[y_predict.name,avg_cost])#fetch_list為儲存列表 print("正在訓練第"+str(i+1)+"次") #觀察結果 print(outs)
接下來開始執行!
這裡輸出是numpy格式的陣列,

訓練第2個迴圈時資料
此處豎著的資料為 y_predict.name
,也就是輸入資料所對應的標籤,這個資料是不是有點陌生呢?對!因為這個資料錯誤太多了,畢竟是機器第二次學習,錯誤那麼多就原諒它了。
至於 957.43744
這個資料,就是損失值,越高說明錯誤越大

訓練第500個迴圈時資料
train_data
呢?,除此之外最後一行的array數組裡面的值也變得非常小了,那麼說明這次的訓練是比較成功的!
8、開始預測
如果想懶省事的話,就直接在原專案下進行“訓練”就可以預測出結果,比方說下面的程式碼
tempx=input("請輸入數值") results = exe.run( feed={'x':tempx,'y':0}, fetch_list=fetch_targets) print(results[0][0])
此處的x是你想輸入的那個值,y標籤則隨意一個數值即可(會影響總體精度,若不想影響請參考下一節讀取\儲存模型)

預測結果
嗯...30x10+3=303
它的結果為303.06653,向下取個整!Pass!
