←上一篇 ↓↑ 下一篇→
2.10 m 个样本的梯度下降 回到目录 2.12 向量化的更多例子

向量化 (Vectorization)

向量化是非常基础的去除代码中for循环的艺术,在深度学习安全领域、深度学习实践中,你会经常发现自己训练大数据集,因为深度学习算法处理大数据集效果很棒,所以你的代码运行速度非常重要,否则如果在大数据集上,你的代码可能花费很长时间去运行,你将要等待非常长的时间去得到结果。所以在深度学习领域,运行向量化是一个关键的技巧,让我们举个栗子说明什么是向量化。

在逻辑回归中你需要去计算 z=wT+bz=w^T+bz=wT+b , www 、 xxx 都是列向量。如果你有很多的特征那么就会有一个非常大的向量,所以 w∈Rnxw\in\R^{n_x}w∈Rnx​ , x∈Rnxx\in\R^{n_x}x∈Rnx​ ,所以如果你想使用非向量化方法去计算 wTxw^TxwTx ,你需要用如下方式(python

x
z=0
for i in range(n_x)z+=w[i]*x[i]
z+=b

这是一个非向量化的实现,你会发现这真的很慢,作为一个对比,向量化实现将会非常直接计算 wTxw^TxwTx ,代码如下:z=np.dot(w,x)+b

这是向量化计算 wTxw^TxwTx 的方法,你将会发现这个非常快

让我们用一个小例子说明一下,在我的我将会写一些代码(以下为教授在他的Jupyter notebook上写的Python代码,)

xxxxxxxxxx
import numpy as np #导入numpy库
a = np.array([1,2,3,4]) #创建一个数据a
print(a)
# [1 2 3 4]
import time #导入时间库
a = np.random.rand(1000000)
b = np.random.rand(1000000) #通过round随机得到两个一百万维度的数组
tic = time.time() #现在测量一下当前时间
#向量化的版本
c = np.dot(a,b)
toc = time.time()
print(“Vectorized version:” + 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(“For loop:” + str(1000*(toc-tic)) + “ms”)#打印for循环的版本的时间

返回值见图。

在两个方法中,向量化和非向量化计算了相同的值,如你所见,向量化版本花费了1.5毫秒,非向量化版本的for循环花费了大约几乎500毫秒,非向量化版本多花费了300倍时间。所以在这个例子中,仅仅是向量化你的代码,就会运行300倍快。这意味着如果向量化方法需要花费一分钟去运行的数据,for循环将会花费5个小时去运行。

一句话总结,以上都是再说和for循环相比,向量化可以快速得到结果。

你可能听过很多类似如下的话,“大规模的深度学习使用了GPU或者图像处理单元实现”,但是我做的所有的案例都是在jupyter notebook上面实现,这里只有CPUCPUGPU都有并行化的指令,他们有时候会叫做SIMD指令,这个代表了一个单独指令多维数据,这个的基础意义是,如果你使用了built-in函数,像np.function或者并不要求你实现循环的函数,它可以让python的充分利用并行化计算,这是事实在GPUCPU上面计算,GPU更加擅长SIMD计算,但是CPU事实上也不是太差,可能没有GPU那么擅长吧。接下来的视频中,你将看到向量化怎么能够加速你的代码,经验法则是,无论什么时候,避免使用明确的for循环。

以下代码及运行结果截图:



课程PPT




←上一篇 ↓↑ 下一篇→
2.10 m 个样本的梯度下降 回到目录 2.12 向量化的更多例子

2.11 向量化-深度学习-Stanford吴恩达教授相关推荐

  1. 3.4 多个例子中的向量化-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.3 计算神经网络的输出 回到目录 3.5 向量化实现的解释 多个例子中的向量化 (Vectorizing across Multiple Examples) 在上一个视频 ...

  2. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  3. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

  4. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  5. 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.9 神经网络的梯度下降法 回到目录 3.11 随机初始化 直观理解反向传播 (Backpropagation Intuition (Optional)) 这个视频主要是推 ...

  6. 2.12 向量化更多例子-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.11 向量化 回到目录 2.13 向量化 Logistic 回归 向量化更多例子 (More Vectorization Examples) 从上节视频中,你知道了怎样通 ...

  7. 3.6 激活函数-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.5 向量化实现的解释 回到目录 3.7 为什么需要非线性激活函数 激活函数 (Activation Function) 使用一个神经网络时,需要决定使用哪种激活函数用隐藏 ...

  8. 2.10 m 个样本的梯度下降-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.9 Logistic 回归的梯度下降法 回到目录 2.11 向量化 mmm 个样本的梯度下降 (Gradient Descent on mmm example) 在之前的 ...

  9. 4.1 深层神经网络-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.12 总结习题 回到目录 4.2 深层网络中的前向传播 深层神经网络 (Deep L-layer Neural Network) 目前为止我们学习了只有一个单独隐藏层的神 ...

最新文章

  1. Compass(更新中。。。)
  2. 皮一皮:你更想成为哪个身材...
  3. 100+人的企业IP怎么进行安全配置 ?
  4. linux几个常用的环境变量配置文件
  5. [MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版
  6. (2021年)IT技术分享社区个人文章汇总(数据库篇)
  7. iOS GorupBy
  8. Android自己的自动化测试Monkeyrunner和用法示例
  9. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
  10. activiti处理当前用户的任务
  11. spring mvc 对象型参数的传递(遇到坑了)
  12. 02_javaSE面试题:单例设计模式
  13. mysql 中的 engine 存储引擎
  14. 计算机网络下一跳IP,计算机网络之IP地址
  15. Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载
  16. KL距离(衡量两个概率分布的差异情况)
  17. 微信逆向:如何统计好友添加数据和聊天记录数据?
  18. 地球的3D模型制作教程【3DsMax】
  19. javaweb验证码明明输入正确却还是提示错误,验证码session不同步、不一致问题
  20. 手机问题点整理和总结

热门文章

  1. [NOI2016]区间-线段树
  2. MongoDB复制集与Raft协议异同点分析
  3. android 中国通信乱码问题
  4. [Cocos2d-x For WP8]DrawPrimitives画图
  5. SVN Switch
  6. SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具
  7. UA MATH563 概率论的数学基础I 概率空间1 基本概念
  8. UA MATH566 统计理论 Cramer-Rao不等式与Delta方法的联系
  9. MongoDB基本概念学习 - 集合
  10. Oracle 检查点队列和HASH Bucket