向量化編程
- 向量化編程
- 前言
- 1、向量化編程
- 2、向量化優勢
- 3、正向傳播和反向傳播
向量化編程
前言
向量化編程是一種利用專門的指令集或并行算法來提高數據處理效率的技術,尤其在科學計算、數據分析和機器學習領域中非常常見。它允許通過一次操作處理整個數組或矩陣的數據,而不是通過循環逐個處理每個元素。這種方法不僅簡化了代碼,而且能夠顯著提高程序運行速度,因為它更有效地利用了現代 CPU 的并行計算能力。
備注:本系列文章基于B站課程: 122集付費!CNN、RNN、GAN、GNN、DQN、Transformer、LSTM等八大深度學習神經網絡一口氣全部學完!學習整理得到。
1、向量化編程
沒更新一次梯度時候,在訓練期間我們會擁有 m 個樣本,那么這樣每個樣本提供進去都可以做一個梯度計算。所以我們要去做所有樣本上的計算結果、梯度等操作。
2、向量化優勢
由于在進行計算的時候,最好不要使用 for 循環去進行計算,使用 Numpy 可以進行更加快速的向量化計算。
例如:
-
使用 for 循環
import numpy as np import timea = np.random.rand(100000) b = np.random.rand(100000) # 第一種 for 循環 c = 0 start = time.time() for i in range(100000):c += a[i] * b[i] end = time.time() print(c) print("計算耗時:%s" % str((end - start) * 1000) + 'ms')
-
使用 np.dot
import numpy as np import timea = np.random.rand(100000) b = np.random.rand(100000) d = a * b # 向量化運算 np.dot() start1 = time.time() c1 = np.dot(a, b) end1 = time.time() print(c1) print("計算耗時:%s" % str((end1 - start1) * 1000) + 'ms')
運行結果如下:
可以看到 Numpy 能夠充分的利用并行化。
Numpy 中提供了很多函數使用
函數 | 作用 |
---|---|
np.ones or np,zeros | 全為1或者0的矩陣 |
np.exp | 指數計算 |
np.log | 對數計算 |
np.abs | 絕對值計算 |
所以上述的 m 個樣本的梯度更新過程,就是去除掉 for 循環
3、正向傳播和反向傳播
前面我們所做的整個過程分為兩個部分,一個是從前往后的計算出梯度和損失,另一部分是從后往前計算參數的更新梯度值。所以在神經網絡中經常會出現這兩個概念。