向量化编程
- 向量化编程
- 前言
- 1、向量化编程
- 2、向量化优势
- 3、正向传播和反向传播
向量化编程
前言
向量化编程是一种利用专门的指令集或并行算法来提高数据处理效率的技术,尤其在科学计算、数据分析和机器学习领域中非常常见。它允许通过一次操作处理整个数组或矩阵的数据,而不是通过循环逐个处理每个元素。这种方法不仅简化了代码,而且能够显著提高程序运行速度,因为它更有效地利用了现代 CPU 的并行计算能力。
备注:本系列文章基于B站课程: 122集付费!CNN、RNN、GAN、GNN、DQN、Transformer、LSTM等八大深度学习神经网络一口气全部学完!学习整理得到。
1、向量化编程
没更新一次梯度时候,在训练期间我们会拥有 m 个样本,那么这样每个样本提供进去都可以做一个梯度计算。所以我们要去做所有样本上的计算结果、梯度等操作。
2、向量化优势
由于在进行计算的时候,最好不要使用 for 循环去进行计算,使用 Numpy 可以进行更加快速的向量化计算。
例如:
-
使用 for 循环
import numpy as np import time a = 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 time a = 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、正向传播和反向传播
前面我们所做的整个过程分为两个部分,一个是从前往后的计算出梯度和损失,另一部分是从后往前计算参数的更新梯度值。所以在神经网络中经常会出现这两个概念。