2.11 向量化-深度学习-Stanford吴恩达教授
←上一篇 | ↓↑ | 下一篇→ |
---|---|---|
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上面实现,这里只有CPU,CPU和GPU都有并行化的指令,他们有时候会叫做SIMD指令,这个代表了一个单独指令多维数据,这个的基础意义是,如果你使用了built-in函数,像np.function
或者并不要求你实现循环的函数,它可以让python的充分利用并行化计算,这是事实在GPU和CPU上面计算,GPU更加擅长SIMD计算,但是CPU事实上也不是太差,可能没有GPU那么擅长吧。接下来的视频中,你将看到向量化怎么能够加速你的代码,经验法则是,无论什么时候,避免使用明确的for循环。
以下代码及运行结果截图:
课程PPT
←上一篇 | ↓↑ | 下一篇→ |
---|---|---|
2.10 m 个样本的梯度下降 | 回到目录 | 2.12 向量化的更多例子 |
2.11 向量化-深度学习-Stanford吴恩达教授相关推荐
- 3.4 多个例子中的向量化-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.3 计算神经网络的输出 回到目录 3.5 向量化实现的解释 多个例子中的向量化 (Vectorizing across Multiple Examples) 在上一个视频 ...
- 2.19 总结-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...
- 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...
- 3.12 总结-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...
- 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.9 神经网络的梯度下降法 回到目录 3.11 随机初始化 直观理解反向传播 (Backpropagation Intuition (Optional)) 这个视频主要是推 ...
- 2.12 向量化更多例子-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.11 向量化 回到目录 2.13 向量化 Logistic 回归 向量化更多例子 (More Vectorization Examples) 从上节视频中,你知道了怎样通 ...
- 3.6 激活函数-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.5 向量化实现的解释 回到目录 3.7 为什么需要非线性激活函数 激活函数 (Activation Function) 使用一个神经网络时,需要决定使用哪种激活函数用隐藏 ...
- 2.10 m 个样本的梯度下降-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.9 Logistic 回归的梯度下降法 回到目录 2.11 向量化 mmm 个样本的梯度下降 (Gradient Descent on mmm example) 在之前的 ...
- 4.1 深层神经网络-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.12 总结习题 回到目录 4.2 深层网络中的前向传播 深层神经网络 (Deep L-layer Neural Network) 目前为止我们学习了只有一个单独隐藏层的神 ...
最新文章
- Compass(更新中。。。)
- 皮一皮:你更想成为哪个身材...
- 100+人的企业IP怎么进行安全配置 ?
- linux几个常用的环境变量配置文件
- [MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版
- (2021年)IT技术分享社区个人文章汇总(数据库篇)
- iOS GorupBy
- Android自己的自动化测试Monkeyrunner和用法示例
- mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
- activiti处理当前用户的任务
- spring mvc 对象型参数的传递(遇到坑了)
- 02_javaSE面试题:单例设计模式
- mysql 中的 engine 存储引擎
- 计算机网络下一跳IP,计算机网络之IP地址
- Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载
- KL距离(衡量两个概率分布的差异情况)
- 微信逆向:如何统计好友添加数据和聊天记录数据?
- 地球的3D模型制作教程【3DsMax】
- javaweb验证码明明输入正确却还是提示错误,验证码session不同步、不一致问题
- 手机问题点整理和总结