为什么在神经网络问题中不首选 For 循环?
For 循环需要很长时间来完成迭代,在 ML 实践中,我们必须优化时间,以便我们可以使用 for 循环。但是你一定想知道用什么?别担心,我们将在下面的部分讨论这个问题。
如何摆脱机器学习或神经网络中的循环?
解决方案是矢量化。现在问题来了,什么是矢量化?向量化是将算法从一次对单个值进行操作转换为一次对一组值(向量)进行操作的过程。现代 CPU 直接支持将单个指令应用于多个数据 (SIMD) 的向量运算。
为什么要使用矢量化而不是 for 循环?
矢量化用于加速Python代码。使用 np.函数可以帮助有效地最小化代码的运行时间。让我们看下面的示例以更好地理解。
例子:
import numpy as np
import time
a = np.array([1, 2, 3, 4])
# there will be 100000 training data
a = np.random.rand(100000)
b = np.random.rand(100000)
# FOR VECTORIZTION
# Measure current time
time1 = time.time()
# computing
c = np.dot(a, b)
# Measure current time
time2 = time.time()
# printing time taken for above calculation
print("vectorized form time taken"+ "\t"+str(1000*(time2-time1))+"ms")
# FOR for loop
# measure current time
time3 = time.time()
c = 0
# computing
for i in range(100000):
c+= a[i]*b[i]
# measure current time
time4 = time.time()
# printing time taken for above calculation
print("for loop time taken "+"\t\t"+str(1000*(time4-time3))+"ms")
输出:
vectorized form time taken 0.43511390686035156ms
for loop time taken 216.04394912719727ms