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的推導: