1. 程式人生 > >python資料科學基礎和吳恩達作業補缺補漏(一)

python資料科學基礎和吳恩達作業補缺補漏(一)

1.1 向量的1範數

向量的1範數即:向量的各個元素的絕對值之和,上述向量a的1範數結果就是:29,MATLAB程式碼實現為:norm(a,1);

1.2 向量的2範數

向量的2範數即:向量的每個元素的平方和再開平方根,上述a的2範數結果就是:15,MATLAB程式碼實現為:norm(a,2);

1.3 向量的無窮範數

1.向量的負無窮範數即:向量的所有元素的絕對值中最小的:上述向量a的負無窮範數結果就是:5,MATLAB程式碼實現為:norm(a,-inf); 
2..向量的正無窮範數即:向量的所有元素的絕對值中最大的:上述向量a的負無窮範數結果就是:10,MATLAB程式碼實現為:norm(a,inf);

二、矩陣的範數

首先我們將介紹數學中矩陣的範數的情況,也就是無論哪個學科都統一的一種規定。。。 
例如矩陣A = [ -1 2 -3; 
4 -6 6]

2.1 矩陣的1範數

矩陣的1範數即:矩陣的每一列上的元素絕對值先求和,再從中取個最大的,(列和最大),上述矩陣A的1範數先得到[5,8,9],再取最大的最終結果就是:9,MATLAB程式碼實現為:norm(A,1);

2.2 矩陣的2範數

矩陣的2範數即:矩陣ATA的最大特徵值開平方根,上述矩陣A的2範數得到的最終結果是:10.0623,MATLAB程式碼實現為:norm(A,2);

2.3 矩陣的無窮範數

矩陣的1範數即:矩陣的每一行上的元素絕對值先求和,再從中取個最大的,(行和最大),上述矩陣A的1範數先得到[6;16],再取最大的最終結果就是:16,MATLAB程式碼實現為:norm(A,inf);

接下來我們要介紹機器學習的低秩,稀疏等一些地方用到的範數,一般有核範數,L0範數,L1範數(有時很多人也叫1範數,這就讓初學者很容易混淆),L21範數(有時也叫2範數),F範數。。。上述範數都是為了解決實際問題中的困難而提出的新的範數定義,不同於前面的矩陣範數。


import numpy as np
a=np.array([[complex(1,-1),3],[2,complex(1,1)]])  
print(a)
print("矩陣2的範數")
print(np.linalg.norm(a,ord=2) )   #計算矩陣2的範數
print("矩陣1的範數")


print(np.linalg.norm(a,ord=1) )   #計算矩陣1的範數
print("矩陣無窮的範數")

print(np.linalg.norm(a,ord=np.inf) )

# arr = np.array([[-1,2,-3],
# [4,-6,6]])
# x = np.dot(arr.T,arr)
# print(x)
# a,b = np.linalg.eig(x)   //a為特徵值元組
# print(a)



*********第二週第一課作業1

模型預測每個例子都是0。一般來說,在網路中初始化所有的權重為零,從而無法打破對稱性。這意味著每一層的每個神經元都將學習相同的東西,你也可以訓練一個神經網路,每一層都有n l=1n l=1,而網路並不比邏輯迴歸等線性分類器更強大。

你應該記住的是:應該隨機初始化l W l,以打破對稱性。然而,初始化偏差b l到0是可以的。只要W l是隨機初始化,對稱就會被破壞。

如果隨機值比較大:成本開始非常高。這是因為在大量隨機值權重的情況下,最後一個啟用(sigmoid)輸出結果非常接近於0或1,當它出現錯誤時,就會導致這個示例的損失非常大。事實上,當log(3)=log(0)log(3)=log(0)時,損失趨於無窮大。糟糕的初始化會導致漸變/爆炸式的漸變,這也會減慢優化演算法的速度。如果您對這個網路進行更長時間的培訓,您將看到更好的結果,但是用過於龐大的隨機數來初始化會減慢優化的速度。

總而言之:將權重初始化到非常大的隨機值並不能很好地工作。希望用小的隨機值進行初始化會更好。重要的問題是:這些隨機值應該有多小?讓我們在接下來的部分中找到答案


*********第二週第一課作業2


cross_entropy_cost = compute_cost(A3, Y)  # This gives you the cross-entropy part of the cost

### START CODE HERE ### (approx. 1 line)
L2_regularization_cost = 1/m*lambd/2*(np.sum(W1**2)+np.sum(W2**2)+np.sum(W3**2))
### END CODER HERE ###

cost = cross_entropy_cost + L2_regularization_cost

觀察:一個超引數的值,你可以使用一個開發集進行調優。L2正則化使你的決策邊界更加平滑。如果太大,也有可能“過於平滑”,導致一個具有高度偏差的模型。什麼是l2-正則化實際上在做什麼?l2-正則化依賴於這樣一種假設,即具有小重量的模型比具有大重量的模型更簡單。因此,通過對成本函式中權重的平方值進行懲罰,你將所有的權重都推到更小的值上。要有大的重量,成本太高了!這就導致了一個更平滑的模型,當輸入發生變化時,輸出的變化會更慢。

你應該記住的是,l2-正則化的含義:成本計算:一個正規化的術語被新增到成本的反向傳播函式中:在梯度中有額外的術語,關於權重矩陣的權重最終會變小(“重量衰減”):權重被推到更小的值。

dropout

    D1 = np.random.rand(A1.shape[0],A1.shape[1])                                         # Step 1: initialize matrix D1 = np.random.rand(..., ...)
    D1 = D1 < keep_prob   

dA2 = dA2 * D2              # Step 1: Apply mask D2 to shut down the same neurons as during the forward propagation

    dA2 = dA2 / keep_prob           # Step 2: Scale the value of neurons that haven't been shut down