码迷,mamicode.com
首页 > 其他好文 > 详细

向量化

时间:2018-12-16 23:33:00      阅读:145      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!