前言¶
在第一章介紹了PaddlePaddle的安裝,接下來我們將介紹如何使用PaddlePaddle。PaddlePaddle是百度在2016年9月27日開源的一個深度學習框架,也是目前國內唯一一個開源的深度學習框架。PaddlePaddle在0.11.0版本之後,開始推出Fluid版本,Fluid版本相對之前的V2版本,Fluid的代碼結構更加清晰,使用起來更加方便。這本章中我們將會介紹如何使用PaddlePaddle來計算1+1,選擇這個簡單的例子主要是爲了讓讀者瞭解PaddlePaddle的Fluid版本的使用,掌握PaddlePaddle的使用流程。我們講過介紹如何使用PaddlePaddle定義一個張量和如何對張量進行計算。
計算常量的1+1¶
PaddlePaddle類似一個科學計算庫,比如Python下我們使用的numpy,提供的大量的計算操作,但是PaddlePaddle的計算對象是張量。我們下面就編寫一個constant_sum.pyPython文件,使用PaddlePaddle計算一個[[1, 1], [1, 1]] * [[1, 1], [1, 1]]。
首先導入PaddlePaddle庫,大部分的API都在paddle.fluid下。
import paddle.fluid as fluid
定義兩個張量的常量x1和x2,並指定它們的形狀是[2, 2],並賦值爲1鋪滿整個張量,類型爲int64.
# 定義兩個張量
x1 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')
x2 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')
接着定義一個操作,該計算是將上面兩個張量進行加法計算,並返回一個求和的算子。PaddlePaddle提供了大量的操作,比如加減乘除、三角函數等,讀者可以在fluid.layers找到。
# 將兩個張量求和
y1 = fluid.layers.sum(x=[x1, x2])
然後創建一個執行器,可以在這裏指定計算使用CPU或GPU。當使用CPUPlace()時使用的是CPU,如果是CUDAPlace()使用的是GPU。解析器是之後使用它來進行計算過的,比如在執行計算之前我們要先執行參數初始化的program也是要使用到解析器的,因爲只有解析器才能執行program。
# 創建一個使用CPU的執行器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 進行參數初始化
exe.run(fluid.default_startup_program())
最後執行計算,program的參數值是主程序,不是上一步使用的是初始化參數的程序,program默認一共有兩個,分別是default_startup_program()和default_main_program()。fetch_list參數的值是在解析器在run之後要輸出的值,我們要輸出計算加法之後輸出結果值。最後計算得到的也是一個張量。
# 進行運算,並把y的結果輸出
result = exe.run(program=fluid.default_main_program(),
fetch_list=[y1])
print(result)
輸出信息:
[array([[2, 2],
[2, 2]], dtype=int64)]
計算變量的1+1¶
上面計算的是張量常量的1+1,並不能隨意修改常量的值,所以下面我們要編寫一個variable_sum.py程序文件,使用張量變量作爲乘數的程序,類似是一個佔位符,等到將要計算時,再把要計算的值添加到佔位符中進行計算。
導入PaddlePaddle庫和numpy的庫。
import paddle.fluid as fluid
import numpy as np
定義兩個張量,並不指定該張量的形狀和值,它們是之後動態賦值的。這裏只是指定它們的類型和名字,這個名字是我們之後賦值的關鍵。
# 定義兩個張量
a = fluid.layers.create_tensor(dtype='int64', name='a')
b = fluid.layers.create_tensor(dtype='int64', name='b')
使用同樣的方式,定義這個兩個張量的加法操作。
# 將兩個張量求和
y = fluid.layers.sum(x=[a, b])
這裏我們同樣是創建一個使用CPU的執行器,和進行參數初始化。
# 創建一個使用CPU的執行器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 進行參數初始化
exe.run(fluid.default_startup_program())
然後使用numpy創建兩個張量值,之後我們要計算的就是這兩個值。
# 定義兩個要計算的變量
a1 = np.array([3, 2]).astype('int64')
b1 = np.array([1, 1]).astype('int64')
這次exe.run()的參數有點不一樣了,多了一個feed參數,這個就是要對張量變量進行賦值的。賦值的方式是使用了鍵值對的格式,key是定義張量變量是指定的名稱,value就是要傳遞的值。在fetch_list參數中,筆者希望把a, b, y的值都輸出來,所以要使用3個變量來接受返回值。
# 進行運算,並把y的結果輸出
out_a, out_b, result = exe.run(program=fluid.default_main_program(),
feed={'a': a1, 'b': b1},
fetch_list=[a, b, y])
print(out_a, " + ", out_b," = ", result)
輸出信息:
[3 2] + [1 1] = [4 3]
到處爲止,本章就結束了。在本章我們學會了PaddlePaddle的使用方式,那在下一章我們使用PaddlePaddle完成我們的第一個安裝——線性迴歸,我們下章見。
同步到百度AI Studio平臺:http://aistudio.baidu.com/aistudio/projectdetail/29339
同步到科賽網K-Lab平臺:https://www.kesci.com/home/project/5bf75387954d6e0010668f76
項目代碼GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note2
注意: 最新代碼以GitHub上的爲準
上一章:《PaddlePaddle從入門到煉丹》一——新版本PaddlePaddle的安裝¶
下一章:《PaddlePaddle從入門到煉丹》三——線性迴歸¶
參考資料¶
- http://www.paddlepaddle.org/documentation/api/zh/1.0/layers.html