DeepLearning based on PaddlePaddle系列一
Github相關地址
AIStudio相關地址
DL 中常用的Python庫
Numpy 操作
? Numpy(Numerical Python extension)是一個第三方的Python包,主要用于科學計算。
array模塊
# array 的基本操作 import numpy as np a = [1, 2, 3, 4] # a是python中的list類型 b = np.array(a) # 數組化之后的b的類型變為 array print(type(b)) # b的類型為<numpy.ndarray>print(b.shape) # shape 參數表示 array 的大小,這里是4 print(b.argmax()) # 調用argmax() 函數可以求得 array 中的最大索引值,這里是3 print(b.max()) # 調用max() 函數可以求得array 中的最大值,這里是4 print(b.mean()) # 調用min() 函數可以求得array 中的平均值,這里是2.5 # NumPy 中實現矩陣轉置 import numpy as NumPy # 使用arange() 函數創建數值范圍并返回 ndarray對象 # 使用reshape() 函數在不改變數值類型的情況下修改數組形狀 x = np.array(np.arange(12).reshape(3,4)) print(x) # 使用transpose() 函數進行矩陣轉置操作 t = x.transpose() print(t) # NumPy 基礎數學運算 import numpy as NumPy# 絕對值 a = np.abs(-1)# sin 函數 b = np.sin(np.pi/2)# tanh 逆函數 c = np.arctanh(0.462118)# e 為底的指數函數 d = np.exp(3)# 2的3次方 f = np.power(2,3)# 點積 1*3+2*4 g = np.dot([1,2],[3,4])# 開方 h = np.sqrt(25)# 求和 i = np.sum([1,2,3,4])# 平均值 j = np.mean([4,5,6,7])# 標準差 p = np.std([1,2,3,2,1,3,2,0])print(a, b, c, d, f, g, h, i, j, p)random 模塊
?隨機模塊可以方便地做一些快速模擬去驗證結論,在神經網絡中也能夠做一些快速的網絡構造。
import numpy as np# 設置隨機數種子 np.random.seed(42) #作用:使得隨機數據可預測,即只需要隨機數seed的值一樣,后續生成的隨機數都一樣。# 產生一個1*3,[0,1]之間的浮點數隨機數 np.random.rand(1,3)# 產生一個[0,1]之間的浮點型隨機數 np.random.random()# 從a中有放回地隨機采樣7個 a = np.array([1,2,3,4,5,6,7]) np.random.choice(a,7)# 從a中無放回地隨機采樣7個 np.random.choice(a,7,replace=False)# 對a進行亂序并返回一個新的array b = np.random.permutation(a)# 生成一個長讀為9的隨機bytes序列并作為str返回 np.random.bytes(9)廣播機制
? 對于array,默認執行對位運算。涉及多個array的對位運算需要array的維度不一致,如果一個array的維度與另外一個array的維度不一致,則在沒有對齊的維度上分別進行對位運算,這種機制稱為廣播(Broadcasting)。
# 廣播機制的理解 import numpy as npa = np.array([[1, 2, 3],[4, 5, 6] ])b = np.array([[1, 2, 3],[1, 2, 3] ])# a 與 b 維度一樣,對位運算 print(a + b)c = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9] ])d = np.array([[1, 2, 3] ])# c 與 d維度不同,廣播機制 # d 和 c的每一行分別計算 print(c + d)向量化
? 向量化是提升計算效率的主要手段之一,對于在機器學習中縮短每次訓練的時間具有重要意義,當可用工作時間不變的情況下,更短的單次訓練時間可以讓程序員有更多的測試機會,進而更快、更好地調整神經網絡的結構和參數。
# 導入庫和數據初始化 import numpy as np import time # 初始化兩個100000維的隨機向量V1、V2用于矩陣相乘計算 V1 = np.random.rand(100000) V2 = np.random.rand(100000) V = 0# 設置變量tic 和toc 分別為計算開始和結束時間。 # 在非向量化版本中,兩個向量相乘的計算過程用for循環實現。# 矩陣相乘 - 非向量化版本 tic = time.time() for i in range(100000):V += V1[i] * V2[i] toc = time.time() print("非向量化 - 計算時間:" + str((toc - tic)*1000) + "ms" + '\n')# 矩陣相乘 - 向量化版本就 tic = time.time() V = np.dot(V1,V2) toc = time.time() print("向量化 - 計算時間:" + str((toc - tic)*1000) + "ms" + '\n')Matplotlib 操作
? Matplotlib 是Python中最常用的可視化工具之一,可以非常方便地創建2D圖表和一些基本的3D圖表。
? 安裝:pip install matplotlib
? 接下來以梯度下降法為例來展示其功能:
?? 假設求解目標函數 func(x) = x^2 的極小值,由于func是一個凸函數,故而它唯一的極小值同時也是它的最小值,其一階導數為 dfunc(x) = 2 * x。
# 創建目標函數及求導函數 import numpy as np import matplotlib.pyplot as plt# 目標函數 y = x^2 def func(x):return np.square(x)# 目標求導函數 dy/dx = 2*x def dfunc(x):return 2*x# 梯度下降法功能函數實現 def gradient_descent(x_start, func_deri, epochs, learning_rate):"""梯度下降法。給定起始點與目標函數的一階導數,求在epochs次迭代中 x 的更新值args:x_start: x 的起始點func_deri: 目標函數的一階導函數epochs: 迭代周期learning_rate: 學習率return:xs 在每次迭代后的位置(包括起始點),長讀為epochs+1"""theta_x = np.zeros(epochs + 1)temp_x = x_starttheta_x[0] = temp_xfor i in range(epochs):deri_x = func_deri(temp_x)delta = - deri_x * learning_ratetemp_x = temp_x + deltatheta_x[i+1] = temp_xreturn theta_x# 利用 Matplotlib 實現圖像繪制 def mat_plot():line_x = np.linspace(-5, 5, 100)line_y = func(line_x)x_start = -5epochs = 5lr = 0.3x = gradient_descent(x_start, dfunc, epochs, lr)color = 'r'# plot 實現繪制的主功能plt.plot(line_x, line_y, c = 'b')plt.plot(x, func(x), c = color, label="lr = {}".format(lr))plt.scatter(x, func(x), c = color)# legend函數顯示圖例plt.legend()# show() 函數展示plt.show()mat_plot()[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CwU0edur-1616200015976)(output_13_0.png)]
# 利用 Matplotlib 實現圖像的顯示 !pip install -U scikit-imageimport matplotlib.pyplot as plt from skimage import color# 讀取一張照片并顯示 plt.figure("A hamburger") hamburger_img = plt.imread('pic.jpeg') plt.imshow(hamburger_img)# z 是漢堡的照片,img0為z, img1對z做了簡單的變換 z = plt.imread('pic.jpeg') z = color.rgb2gray(z) img0 = z img1 = 1 - z# cmap 指定為"gray"用來顯示灰度圖 fig = plt.figure("Auto Normalized Visualization") ax0 = fig.add_subplot(121) ax0.imshow(img0, cmap='gray') ax1 = fig.add_subplot(122) ax1.imshow(img1, cmap='gray') plt.show()總結
以上是生活随笔為你收集整理的DeepLearning based on PaddlePaddle系列一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 周志华《机器学习》读书笔记(一)
- 下一篇: DeepLearning based o