标签:span 梯度下降 完成 random 一件事 rand 分享图片 多少 src
有这么一件事情,比如说在梯度下降过程中我们需要不断地调整θ的值来完成梯度下降,可是使用循环会很慢,因为我们现在的计算机大部分都是SIMD也就是单指令流多数据流。如果使用for循环的话,那么之一条指令的数据流就是for循环里所规定的,并没有进行并行运算,没有充分运用计算机资源。然而,在深度学习(deeplearning)里,我们常常需要进行很多的梯度下降,等等之类需要循环的,使用显式的循环会让运算速度十分的缓慢。
想要充分的利用计算机的并行性,我们要学会使用向量化。在Python的numpy模块,向量化得到了充分的展现,下面是一个例子。
import time import numpy as np a=np.random.rand(1000000)#产生一个有1000000个数的随机矩阵 b=np.random.rand(1000000) #这部分使用的是向量化 tic=time.time() c=np.dot(a,b) toc=time.time() print(c) print("向量化:"+str(1000*(toc-tic))+"ms") #这部分使用的是显式的循环 c=0 tic=time.time() for i in range(1000000): c+=a[i]*b[i] toc=time.time() print(c) print("循环:"+str(1000*(toc-tic))+"ms")
这个代码得结果是这样的
两个计算的结果是差不多的,但是向量化充分利用了cpu进行并行化运算,几乎没有用多少时间,循环却用了400毫秒。
所以我们一定要学会使用向量。
标签:span 梯度下降 完成 random 一件事 rand 分享图片 多少 src
原文地址:https://www.cnblogs.com/fromzore/p/10128054.html