1. 程式人生 > >Deep Learning Specialization課程筆記——神經網路程式設計基礎

Deep Learning Specialization課程筆記——神經網路程式設計基礎

Vectorization

非向量化和向量化的區別:


在jupyter notebook上:

import time

a=np.random.rand(1000000)
b=np.random.rand(1000000)

tic=time.time()
c=np.dot(a,b)
toc=time.time()
print ("vectorized version:"+ str(1000*(toc-tic))+"ms")

c=0
tic=time.time()
for i in range(1000000):
    c+=a[i]*b[i]
toc=time.time()
print("for loop version:"+ str(1000*(toc-tic))+"ms")

得到結果:


說明向量化速度比for loop快很多。

GPU和CPU都有並行化的指令,他們有時候會叫做SIMD指令,代表一個單獨指令多維資料。向量化利用了並行化去更快地計算。

More Vectorization Examples

經驗之談,在編寫神經網路和邏輯迴歸時,都要儘可能避免使用顯式的for-loop。

矩陣A和向量v的乘積例子:


向量v向向量u轉化的例子:


其中v**2計算向量中每個元素的平方。

對邏輯迴歸程式碼的向量化改寫:


 Vectorizing Logistic Regression

可以實現用梯度下降的一次迭代來處理整個訓練集,而不需要一個for loop。

向量化的改寫公式:


Vectorizing Logistic Regression's Gradient Output


在進行梯度下降的計算時,db和dw的求解如下:


對程式碼的改寫為:


右邊的式子實現了不使用for迴圈完成一次梯度下降,但如果想讓梯度下降迭代很多次,還是需要for迴圈。

Broadcasting

廣播是另一種能讓python程式碼執行更快的技術。以卡路里問題舉例:



求每種食物的總卡路里:


然後計算百分比:


廣播在這裡的含義,是可以自動將(1,4)矩陣轉變為(3,4),實現除法運算。

上上節中,加b也是運用了廣播的原理。

更多廣播運算:


A note on python/numpy vectors


具體的note見註釋。

assert(a.shape==(5,1))斷言語句。

這節的要點就是:為了簡化程式碼,不要用秩為一的矩陣

Quick tour of Jupyter/iPython Notebooks

沒有什麼內容。

Explanation of logistic regression cost function

loss function公式的推導:


cost function的推導: