zoukankan      html  css  js  c++  java
  • 向量化

    有这么一件事情,比如说在梯度下降过程中我们需要不断地调整θ的值来完成梯度下降,可是使用循环会很慢,因为我们现在的计算机大部分都是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毫秒。

    所以我们一定要学会使用向量。

  • 相关阅读:
    Win7 on VirtualBox 看不到 usb device
    framebuffer line_length 參數
    booting logo & booting animation
    charing animation
    vim
    [筆記] Ubuntu Linux 使用 apt-get 指令移除軟體並清理遺留的垃圾
    git 指令
    adb devices 偵測不到 手機
    apt-get 相關設定
    Ubuntu 14 設定 遠端連線,讓別台電腦可以連線進來
  • 原文地址:https://www.cnblogs.com/fromzore/p/10128054.html
Copyright © 2011-2022 走看看