[DeeplearningAI笔记]第一章2.11-2.16 向量化与python/numpy向量说明

觉得有用的话,欢迎一起讨论相互学习~

吴恩达老师课程原地址

2.11向量化

  • 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学习领域中将大数据集进行向量化操作变得十分重要.

  • 对于非向量化数据的计算,我们会使用循环去遍历整个数据集计算对应项的乘积.例如我们要计算一个数据样本,其中w和b都是一个n维向量,计算式子:\(Z=W^{T}+b\)那么我们的式子会写为:

z=0
for i in range(n-x)
z+=w[i]*x[i]
z+=b
  • 但是这种计算方法就十分慢.如果我们使用向量化的方法,我们的语句会写为
z=np.dot(w,x)+b
  • tips:jupyter notebook中cell的运行与输出结果可以直接使用Shift+Enter运行代码并且将结果输出.

  • 这时我们使用jupyter notebook 去计算一下两个百万级的数据相乘后花了多少时间

import numpy as np
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
# 向量化版本
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("For loop:"+ str(1000*(toc-tic)) + "ms")
  • 经过试验我们看出非向量化版本比向量化版本多计算了大约300倍的时间.

    对于大多数深度学习来说,可扩展的深度学习实现是在GPU(图像处理单元)上做的,GPU和CPU都有并行化的指令.也叫做SIMD指令(单指令流多数据流).GPU比CPU更加擅长SIMD指令,但是CPU也不差.总体而言向量化能够加速你的代码.经验法则是只要有其他可能,就不要使用显示for循环.

2.16 python/numpy向量说明

  • python语言有很高的灵活性,这是一种优势也是一种劣势,总体来说这是python语言的优势,这让python语言的表现力更强.但是这也是一个劣势,有时会出现一些非常细微的错误和非常奇怪的错误,特别是当你不熟悉python语言和numpy广播运作的方式时.例如如果你想用一个列向量把它加到一个行向量上,你可能会认为维度不匹配或者是类型错误等等错误,但实际上这是可以执行的,实际上会得到一个行向量和一个列向量求和之后的矩阵.
import numpy as np
a = np.random.randn(5)
# 生成五个随机高斯变量,存储在数组a中
print(a)
[-1.17703191 -0.67152812  0.07475093  0.36539824 -0.07583196]
print(a.shape)
(5,)
# (5, )的shape即是python中秩为1的数组
# 它既不是行向量也不是列向量,这导致他有一些不直观的效果
# 例如,如果我们将a.T也写出来,即a矩阵的转置形式,这时候看起来还是和a一样的.
# 这是一种很奇特的结构,在编写程序一定要避免
print(a.T)
[-1.17703191 -0.67152812  0.07475093  0.36539824 -0.07583196]
# 所以这时候发现a和a的转置看起来是一样的,这时候我们print a和a的转置的内积
# 我们会认为a和a的转置相乘,按理说应该被称为矩阵的外积,也就说应该会得到一个矩阵
# 但是实际上我们得到的是一个数字
print(np.dot(a, a.T))
1.98120819241
# 所以我们建议在编写神经网络时不要使用形状是(5,)或者(n,)这种秩为1的数组
# 我们应该显示的使用shape为(n,1)的向量
a = np.random.rand(5, 1)
# 这时候我们得到是5行1列的向量
print(a)
[[ 0.74009072]
[ 0.03667174]
[ 0.91847869]
[ 0.15726344]
[ 0.41720873]]
# 并且这时a.T已经变成一个行向量了
print(a.T)
# 注意在这个数据结构中有两个方括号
print(a.T.shape)
[[ 0.74009072  0.03667174  0.91847869  0.15726344  0.41720873]]
(1, 5)
# 并且这时候我们计算 a 和 a的转置的内积
print(np.dot(a, a.T))
# 会得到一个向量的外积
[[ 0.54773428  0.02714041  0.67975756  0.11638921  0.30877231]
[ 0.02714041 0.00134482 0.03368221 0.00576712 0.01529977]
[ 0.67975756 0.03368221 0.84360311 0.14444312 0.38319733]
[ 0.11638921 0.00576712 0.14444312 0.02473179 0.06561168]
[ 0.30877231 0.01529977 0.38319733 0.06561168 0.17406313]]
  • 如果在实际操作中还是得到了一个秩为1的向量,不要犹豫,你可以使用reshape操作,将其转化成一个15或者是51的数组
  • 并且在程序编写的过程中可以适当使用assert语句,确保向量的形状是自己所需要的.

[DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)的更多相关文章

  1. [DeeplearningAI笔记]神经网络与深度学习2.1-2.4神经网络基础

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.1 二分分类 在二分分类问题中,目标是训练出一个分类器,它以图片的特征向量x作为输入,预测输出的结果标签y是1还是0.在图像识别猫图片的例子 ...

  2. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

  3. deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记

    1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...

  4. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)

     =================第2周 神经网络基础=============== ===2.1  二分分类=== ===2.2  logistic 回归=== It turns out, whe ...

  5. deeplearning.ai 神经网络和深度学习 week3 浅层神经网络

    1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...

  6. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  7. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  8. Deeplearning.ai课程笔记-神经网络和深度学习

    神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多. 这篇笔记记录了Week4+5中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...

  9. MXNet设计笔记之:深度学习的编程模式比较

    市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...

随机推荐

  1. Effecvtive Java Note

    代码应该被重用,而不是被拷贝 同大多数学科一样,学习编程的艺术首先要学会基本的规则,然后才能知道什么时候可以打破这些规则   创建和销毁对象 1.考虑用静态工厂方法代替构造器. 优势:有名称.不必再每 ...

  2. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  3. hdu_1025(LIS Nlog(N)算法)

    题意:自己慢慢读吧.大概就是道路两边建路,给出建路需求,要求两条路不能有交叉,问最多可以建多少条路. 题解:一看数据范围500000,应该是dp,再画个图模拟一下,发现实质就是求最长上升子序列,很自然 ...

  4. [国嵌攻略][127][tty驱动程序架构]

    tty概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. 1.串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备.Lin ...

  5. parseInt原来是这样用的

    今天在群里无意中看到了这样一个问题,突然发现不会,结果运行一看,懵逼了,不知道为什么???(结果是啥?自己去试试看) 现在我们还是先来复习一下parseInt()这个知识点吧! parseInt() ...

  6. nginx服务器配置/websocket nginx 配置笔记

    server { listen 80; server_name xxx.com; # add_header '*' ; location /u/ { # 反向代理透传客户端ip proxy_set_h ...

  7. dedecms织梦网站图片集上传图片出现302错误图片提示怎么解决 已测

    时间:2016-01-20 来源:未知 作者:模板之家 阅读:次 小编今天上传织梦网站模板的时候,在图片集里面选择上传图片的时候,弹出302错误提示,当是真的是郁闷了,试了好几次,开始还以为是图片过大 ...

  8. [转载]利用memcached在多台服务器之间共享PHP的session数据

    原文地址:利用memcached在多台服务器之间共享PHP的session数据作者:a1049709658 最近我的几篇文章都是是最近项目的一点心得^^ 这个项目一开始就设计的"很大&quo ...

  9. ADO.NET复习总结(1)--ADO.NET基础介绍

    1.为什么要学ADO.NET: 之前我们所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql, 所以我们搭建一个界面(Web或Winform)让用户方便的操作数据库中的数据. 2.什 ...

  10. mysql视图定义、原理、创建、使用

    定义: 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并在引用视图时 ...