用 Python 練習實作深度學習,主要包含 Tensorflow 以及 SVM,著重於實作範例,未深入涉及各 DL 演算法模型原理及其數學。
Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示
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()
大綱
[Development] Deep Learning over Python 深度學習基於 Python 1/3- Basic Tools: 基於 python- numpy, matplotlib, scipy, Pandas
- Keras (基於 Tensorflow)
- Tensorflow
- Support Vector Machine (SVM)
- 強化學習 Reinforcement Learning (RL)
Reference: 本篇基於 Udemy 課程 "吳佳諺- Python 深度學習" 為架構出發衍生,其他引用資料個別在段落中標示
Basic Tools
numpy
import numpy as npfrom 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()
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') # red dot
plt.ylabel('value')
plt.axis([0, 6, 0, 20])
plt.show()
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]
Series 顧名思義就是用來處理時間序列相關的資料(如感測器資料等),主要為建立索引的一維陣列。
DataFrame 則是用來處理結構化(Table like)的資料,有列索引與欄標籤的二維資料集,例如關聯式資料庫、CSV 等等
- from https://oranwind.org/python-pandas-ji-chu-jiao-xue/
[TBC]
留言
張貼留言