在学习深度学习的过程中,一般我们不会使用循环来构建激活函数z,而使用numpy包构建向量。其中说到最重要的一个原因是使用向量构建会大大缩短计算运行的时间。之前只有这样一个概念,但是使用python代码分别实现这两种方式后才感受到向量化的优势。
向量化实现
import time
import numpy as np
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')
for循环遍历实现
c = 0
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
for i in range(1000000):
c += a[i] * b[i]
toc = time.time()
print(c)
print('for loop:' + str(1000*(toc-tic)) + 'ms')
通过这两种方法构建的矩阵c的内容是一样的,但运行结果会显示使用向量化方法构建的速度约为for循环的500倍!在训练大型神经网络的过程中这一速度就显得非常重要了。在任何需要使用到for loop的时候,都考虑一下是否可以用向量代替。事实上numpy中有大量可以直接作于向量的函数,如exp,log,abs等等,大大提高了计算效率。
网友评论