跳到主要內容

[Development] Deep Learning over Python 深度學習基於 Python 1/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。

大綱

[Development] Deep Learning over Python 深度學習基於 Python 1/3
  • Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas
[Development] Deep Learning over Python 深度學習基於 Python 2/3
  • Keras (基於 Tensorflow) 
  • Tensorflow
[Development] Deep Learning over Python 深度學習基於 Python 3/3
  • Support Vector Machine (SVM)
  • 強化學習 Reinforcement Learning (RL)

Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示

Basic Tools

numpy

import numpy as np
from scipy import linalg  # linear algebra
import matplotlib.pyplot as plt

myarray = np.array([[1, 2, 3], [4, 5, 6]])
print('myarray:', myarray)
myarray_allzero = np.zeros((3, 5), dtype = np.int16)
print('myarray_allzero:', myarray_allzero)
myarray_2 = np.arange(15, dtype = np.int64)
print('myarray_2:', myarray_2)
myarray_2 = myarray_2.reshape((3, 5))
print('myarray_2 reshape:', myarray_2)

myarray: [[1 2 3]
 [4 5 6]]
myarray_allzero: [[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
myarray_2: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
myarray_2 reshape: [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

myarray_7 = np.zeros((10, 3))
myarray_8 = myarray_7.T
print('myarray_8:', myarray_8)
myarray_9 = np.reshape(myarray_8, (5, 6))
print('myarray_9:', myarray_9)
myarray_10 = np.ravel(myarray_9)
print('myarray_10:', myarray_10)

myarray_8: [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
myarray_9: [[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]
myarray_10: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

myarray_3 = np.linspace(0, 100, 5)  # 1包含首尾取平均 5 點
print('myarray_3:', myarray_3)
myarray_4 = np.random.random((2, 3))  # random 值填 2*3 矩陣 
print('myarray_4:', myarray_4)

myarray_3: [  0.  25.  50.  75. 100.]
myarray_4: [[0.81214287 0.69335586 0.1207997 ]
 [0.50709532 0.52782355 0.99811017]]

myarray_5 = np.arange(25)
myarray_5 = myarray_5.reshape((5, 5))
myarray_6 = np.arange(25)
myarray_6 = myarray_6.reshape((5, 5))
print('plus:', myarray_5 + myarray_6)
print('minus:', myarray_5 - myarray_6)
print('multiply:', myarray_5 * myarray_6)
print('divide:', myarray_5 / myarray_6)
print('square:', myarray_5 ** 2)
print('compare:', myarray_5 < myarray_6)
print('dot:', myarray_5.dot(myarray_6))

plus: [[ 0  2  4  6  8]
 [10 12 14 16 18]
 [20 22 24 26 28]
 [30 32 34 36 38]
 [40 42 44 46 48]]
minus: [[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
multiply: [[  0   1   4   9  16]
 [ 25  36  49  64  81]
 [100 121 144 169 196]
 [225 256 289 324 361]
 [400 441 484 529 576]]
divide: [[nan  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]]
square: [[  0   1   4   9  16]
 [ 25  36  49  64  81]
 [100 121 144 169 196]
 [225 256 289 324 361]
 [400 441 484 529 576]]
compare: [[False False False False False]
 [False False False False False]
 [False False False False False]
 [False False False False False]
 [False False False False False]]
dot: [[ 150  160  170  180  190]
 [ 400  435  470  505  540]
 [ 650  710  770  830  890]
 [ 900  985 1070 1155 1240]
 [1150 1260 1370 1480 1590]]

x = np.arange(0, 3 * np.pi, 0.1)  # 每隔 0.1 選一點
y = np.sin(x)
plt.plot(x, y)
plt.show()
mu, sigma = 2, 0.5
v = np.random.normal(mu, sigma, 10000)  # 平均 2, 標準差 0.5
plt.hist(v, bins = 500, normed = 1)
plt.show()

matplotlib 畫圖

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')  # red dot
plt.xlabel('item')
plt.ylabel('value')
plt.axis([0, 6, 0, 20])
plt.show()

import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 5., 0.2)  # [0, 0,2, 0,4, ..., 4.8]
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.xlabel('index')
plt.ylabel('value')
plt.show()
m1 = [1, 2, 3, 4, 5, 6, 10, 12]
s1 = [2, 4, 6, 8, 10, 12, 14, 16]
m2 = [1, 3, 4, 5, 6, 7, 10, 12]
s2 = [1, 2, 3, 15, 12, 8, 6, 21]
plt.plot(m1, s1, lw=2, label='Mary')  # lw- line width
plt.plot(m2, s2, lw=2, label='Mary')
plt.legend()  # 圖例
plt.title('example')
plt.show()

scipy 科學函式庫

linear algebra

# inverse(反矩陣) and dot(內積)
a1 = np.array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])
print(a1)
a1_inv = linalg.inv(a1)
print(a1_inv)
print(a1.dot(a1_inv))

[[1 3 5]
 [2 5 1]
 [2 3 8]]
[[-1.48  0.36  0.88]
 [ 0.56  0.08 -0.36]
 [ 0.16 -0.12  0.04]]
[[ 1.00000000e+00 -1.11022302e-16 -6.24500451e-17]
 [ 3.05311332e-16  1.00000000e+00  1.87350135e-16]
 [ 2.22044605e-16 -1.11022302e-16  1.00000000e+00]]

# determinant (行列式)
a2 = np.array([[1, 2], [3, 4]])
print(linalg.det(a2))  # 1*4-3*2

-2.0

# eigenvalues and eigenvectors
a3 = np.array([[1, 5, 2], [2, 4, 1], [3, 6, 2]])
eigenvalues_a3, eigenvectors_a3 = linalg.eig(a3)
l1, l2, l3 = eigenvalues_a3
print('eigenvalues:', l1, l2, l3)
print('eigenvectors', eigenvectors_a3)

eigenvalues_a3_column0 = np.array(eigenvectors_a3[:,0]).T  # transport
print('make column 0 of eigenvectors to an array:', eigenvalues_a3_column0)
print('normalize:', linalg.norm(a3.dot(eigenvalues_a3_column0) - l1 * eigenvalues_a3_column0))

eigenvalues: (7.957916204910748+0j) (-1.2576647056775332+0j) (0.2997485007667829+0j)
eigenvectors [[-0.5297175  -0.90730751  0.28380519]
 [-0.44941741  0.28662547 -0.39012063]
 [-0.71932146  0.30763439  0.87593408]]
make column 0 of eigenvectors to an array: [-0.5297175  -0.44941741 -0.71932146]
normalize: 3.233018248352212e-15

Pandas

Pandas 提供兩種主要的資料結構,Series 與 DataFrame。
Series 顧名思義就是用來處理時間序列相關的資料(如感測器資料等),主要為建立索引的一維陣列。
DataFrame 則是用來處理結構化(Table like)的資料,有列索引與欄標籤的二維資料集,例如關聯式資料庫、CSV 等等 
- from https://oranwind.org/python-pandas-ji-chu-jiao-xue/
[TBC]


繼續閱讀 [Development] Deep Learning over Python 2/3

留言

這個網誌中的熱門文章

[Development] Deep Learning over Python 深度學習基於 Python 2/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。 大綱 [Development] Deep Learning over 深度學習基於 Python Python 1/3 Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas [ Development] Deep Learning over Python  深度學習基於 Python  2/3 Keras (基於 Tensorflow) , 使用 Sequential 模型(範例 實作 "MINST 手寫辨識") CNN (Convolutional Neural Networks) 卷積神經網路 (範例 實作 "MINST 手寫辨識") RNN (Recurrent Neural Networks) 遞歸(迴)神經網路 (範例 實作 "IMPb 評論辨識") Tensorflow 基礎應用 NN 基本作用原理 CNN (Convolutional Neural Networks) 卷積神經網路 (範例 實作 "MINST 手寫辨識") [Development] Deep Learning over Python 深度學習基於 Python 3/3 Support Vector Machine (SVM) 強化學習 Reinforcement Learning (RL) Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示 Keras Keras 是一个用 Python 编写的高级神经网络 API,它能够以  TensorFlow ,  CNTK , 或者  Theano  作为后端运行 Keras 的核心数据结构是  model ,一种组织网络层的方式。最简单的模型是  Sequential 顺序模型 ,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用  Keras 函数式 API ,它允许构建任意的...

[Development] Deep Learning over Python 深度學習基於 Python 3/3

  用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。 大綱 [Development] Deep Learning over Python 深度學習基於 Python 1/3 Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas [Development] Deep Learning over Python 深度學習基於 Python 2/3 Keras (基於 Tensorflow)  Tensorflow [Development] Deep Learning over Python 深度學習基於 Python 3/3 Support Vector Machine (SVM) 萬用分類機 Reinforcement Learning (RL) 強化學習 Reference: 本篇基於  Udemy 課程 "吳佳諺- Python 深度學習"  為架構出發衍生,其他引用資料個別在段落中標示 Support Vector Machine (SVM) 萬用分類機   SVM 就是用統計上風險最小化的方法,來產生一個分類的超平面 (hyperplane),也就是找到一個決策邊界 (decision boundary),該邊界可以讓「兩類」之間的邊界 margins 最大化。   SVM 是一個二元分類器,也就是只能做非黑即白的分類判斷。   如果資料只有二維,如在二維直線座標系中標記了許多點,若這些點概念上可以被分成兩類,我們就可以透過迴歸分析的幫助,找出一條線來最適當的把這兩類的點切分開來,這條線如果是直線,那就是一個一元一次方程式,如果是曲線那當然就是二次三次或更高。   而該怎麼找出最佳的一個切割面?SVM 的提議也很簡單,他假設如果存在一個 hyperplane,這個 hyperplane 距離所有 A/B 類節點的距離總和最長,那他就是一個最佳的分割面,這裡的距離的概念也就是 margin。簡單理解就是,處在兩個點的「最中間」位置的那條線就是這兩點的最佳切割線。  ...