【学习记录】《DeepLearning.ai》深度学习第二课(2):神经网络的编程基础

简介: 深度学习第二课第二部分笔记

深度学习第二课(2):神经网络的编程基础

2.11 向量化(Vectorization)

逻辑回归中计算$z=w^Tx+b$​,其中$w,x$​都是列向量,下面是两种方法的对比:

1.循环

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

2.向量化

z=np.dot(w,x)+b

很明显向量化方法较快

举例说明:

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)
tic=time.time()#输出当前时间
#向量化版本
c=np.dot(a,b)
toc=time.time()
print(f"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(f"For loop:{str(1000*(toc-tic))}ms")

输出如下:

两个版本对比

可以看到,向量化版本能快速得到结果。

大规模的机器学习一般都使用GPU或者图像处理单元进行实现,CPU和GPU都有并行化指令,他们有时候叫做SIMD指令,通常GPU更擅长SIMD计算。如果我们应用类似np.dot这样的函数,Pytho会自动进行并行化处理。


2.12 向量化的更多例子

numpy库中有很多向量函数,如:

import numpy as np
np.exp(v)#计算指数函数
np.log()#计算对数函数 
np.abs()#绝对值函数
np.maximum()#计算元素y中的最大值
v**2#算平方
1/v#求倒数
#通常numpy中有类似的内置函数可以避免使用循环

2.13 向量化逻辑回归

向量化逻辑回归

先计算$Z$,如上图所示:

z=np.dot(w.T,x)+b#注意z的维度:1*m 参数b使用了python广播

再计算A,也就是由a组成的矩阵,也就是我们之前提到的$\widehat{y}$:

通过编写sigmoid函数

#通过Python定义sigmoid函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))

然后直接调用:

a=sigmoid(z)#和z的维度保持一致

2.14 向量化logistic回归的梯度输出

梯度图1

梯度图2

向量化方法如下:

向量化梯度输出

前五个公式完成了前向和后向传播,后面两个公式用来更新参数(具体参考上面图片的内容)


2.15 python中的广播

cal=A.sum(axis=0)#在A数组的竖直方向上求和,axis=1表示在水平方向上求和
percentage=100*A/cal.reshape(1,4)#reshape(1,4)将其变为1*4矩阵,这块有点多余了,本身就是1*4

reshape是常用的时间操作,时间复杂度是O(1),

python广播

如上图所示,如果两个矩阵有一个维度相同,而其中一个矩阵的另外一个维度为1,则可以将维度为1的矩阵沿着1维度的方向上进行广播。


2.16 python_numpy向量的说明

广播实例

注意断言函数的用法:assert(a.shape==(5,1))

上图总结:在实际使用时候,尽量定义为一个列向量,这样会减少bug,如果不小心定义为一个秩为1的向量,可以使用a=a.reshape((5,1))来转换。断言函数用来检查某些变量或数组是否是我们预期的,若不是则会报错,在实际程序出现bug时候调试非常有用。


2.17 Jupyter/iPython Notebooks快速入门

$shift+enter$执行块代码


2.18 logistic损失函数的解释

PASS

相关文章
|
15天前
|
人工智能 IDE 测试技术
利用AI技术提升编程效率
【10月更文挑战第6天】本文将探讨如何通过人工智能(AI)技术提升编程效率。我们将介绍一些实用的工具和策略,如代码补全、错误检测和自动化测试,以及如何将这些工具整合到你的日常工作流程中。无论你是初学者还是经验丰富的开发者,都可以从这些技巧中受益。让我们一起探索如何利用AI技术来简化编程过程,提高生产力吧!
|
14天前
|
人工智能 JSON Java
【极速入门版】编程小白也能轻松上手Comate AI编程插件
【极速入门版】编程小白也能轻松上手Comate AI编程插件
26 0
|
14天前
|
人工智能 IDE Java
AI 代码工具大揭秘:提高编程效率的必备神器!
【10月更文挑战第1天】近年来,人工智能得到了迅猛的发展,并在各行各业都得到了广泛应用。尤其是近两年来,AI开发工具逐渐成为开发者们的新宠,其中 GitHub Copilot 更是引发了无限可能性的探索。
75 9
AI 代码工具大揭秘:提高编程效率的必备神器!
|
20天前
|
Python 机器学习/深度学习 人工智能
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
【10月更文挑战第1天】本文通过构建一个简单的强化学习环境,演示了如何创建和训练智能体以完成特定任务。我们使用Python、OpenAI Gym和PyTorch搭建了一个基础的智能体,使其学会在CartPole-v1环境中保持杆子不倒。文中详细介绍了环境设置、神经网络构建及训练过程。此实战案例有助于理解智能体的工作原理及基本训练方法,为更复杂应用奠定基础。首先需安装必要库: ```bash pip install gym torch ``` 接着定义环境并与之交互,实现智能体的训练。通过多个回合的试错学习,智能体逐步优化其策略。这一过程虽从基础做起,但为后续研究提供了良好起点。
71 4
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
|
2天前
|
人工智能 搜索推荐 测试技术
AI 辅助编程的效果如何衡量?
本文主要介绍了如何度量研发效能,以及 AI 辅助编程是如何影响效能的,进而阐述如何衡量 AI 辅助编程带来的收益。
|
6天前
|
人工智能 运维 自然语言处理
通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
本文介绍了通义灵码个人版中的@workspace和@terminal功能,帮助运维工程师快速理解项目结构、实现需求和执行指令。@workspace通过RAG技术深度感知代码库,支持快速上手新项目和协助实现新需求;@terminal则提供智能指令生成和解释,提升开发效率。
59 5
|
6天前
|
人工智能 Python
AI师傅和通义灵码合作助力你学编程
湖北的一位股民通过AI学习了使用通义灵码制作股票浮动止盈点计算器,大幅提升了效率。通过描述需求、编写代码、解释代码和纠错等步骤,实现了从获取股票最高价到计算止盈价的全过程,简化了操作流程,提高了投资决策的准确性。
835
|
3天前
|
人工智能 Java 开发者
基于通义灵码轻松进行编程 在 AI 师傅(AI-Shifu.com)学的通义灵码
作为一名Java开发者,通过使用通义灵码个人版学习Python,学习效率提升了80%。根据AI师傅平台的指导,高效利用AI辅助学习的主要步骤包括:1. 描述需求,了解所需技术;2. 细化需求描述,便于AI高效编程;3. 发送参考指令给AI;4. 执行代码测试;5. 查看代码注释;6. 优化代码。
835
17 1
|
8天前
|
机器学习/深度学习 人工智能 Cloud Native
在AI师傅(AI-Shifu.com)学习通义灵码的旅程
在这个数字化时代,编程技能愈发重要。通过AI师傅平台,我接触并学习了阿里云推出的通义灵码。从初识到深入学习,我系统掌握了云计算基础、云原生技术、数据库管理和大数据与人工智能等方面的知识。通过实践项目,我不仅巩固了理论,还提升了实际操作能力。通义灵码的易用性和强大功能,让我对云计算有了全新认识。感谢AI师傅提供的学习机会,推荐大家参与征文活动,共同分享学习成果。
|
7天前
|
人工智能