Pytorch深度学习笔记(五)反向传播算法

news2024/12/23 9:48:38

推荐课程:04.反向传播_哔哩哔哩_bilibili

1.为什么要使用反向传播算法

简单模型可以使用解析式更新w

复杂模型,如图,输入矩阵x_{n}为5*1矩阵,等一层权重矩阵H1为6*5矩阵,则需要30个解析式,第二层权重矩阵H2为6*7矩阵,则需要42个解析式,第三层……可以看出我们无法通过解析式的方式来更新w。

因此需要反向传播算法,反向传播算法可以在网络中传播梯度,最终通过链式法则完成每个节点的梯度计算,从而完成每个节点的w更新。

反向传播算法,又称 BP 算法,它将输出层的误差反向逐层传播,通过计算偏导数来更新网络参数使得误差函数最小化。

2.二层神经网络:

 MM为矩阵乘法,ADD为矩阵加法,\hat{y}是预测值,w为权重,b为偏移量(bias)。

第一层H1为w1*x+b1,第二层H2为w2*H1+b2。

不难发现,如果一直进行线性变换,最终得到的化简函数依然是一个线性函数,因此需要在每一层的输出,引入一个的非线性的变换函数\sigma

3.反向传播算法更新权值的过程

根据链式法则可以向前推出前一个节点的偏导数,根据梯度向下算法的权重更新公式\omega=\omega-\alpha\frac{\partial cost}{\partial \omega },实现反向更新权重w。

(1) 一个计算图正向传播和反向传播的过程

如图,根据链式法则\frac{\partial L}{\partial \omega }=\frac{\partial L}{\partial z}\cdot \frac{\partial z}{\partial \omega },得到\frac{\partial L}{\partial \omega },进行w更新。L为损失值Loss。

(2)具体实现过程

r为损失值loss。反向过程的最后,会得到\frac{\partial loss}{\partial \omega }可以根据梯度向下算法更新\omega

练习1:

 答案为-8

练习2:

 答案为2 ,2

3.张量Tensor

单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)。在深度学习中,标量、向量、矩阵、高维矩阵都统称为张量。在pytorch中,一个Tensor内部包含数据导数两部分。

线性模型pytorch实现代码:

import torch

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

# 将w转化为一个只含一个标量的张量
w = torch.Tensor([1.0])
# 配置
# 设置需要计算梯度
w.requires_grad = True

# 预测值函数
def forward(x):
    return x * w

# 误差值函数
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

print("predict (before training)", 4, forward(4).item())
# 100轮的训练
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        # 先正向传播,生成计算图
        l = loss(x, y)
        # 再反向传播,backward()用于自动计算图中所有张量的梯度(偏导数)然后存入对应张量中的grad中
        l.backward()
        # item()函数的作用是从包含单个元素的张量中取出该元素值,并保持该元素的类型不变。grad是张量,使用item()进行取值,否则会生成计算图。
        # grad和data都是torch的属性,可以直接调用
        print('\tgard:', x, y, w.grad.item())
        # 更新w的值。注意grad也是一个张量,包含data和梯度。
        # grad是张量,grad.data取到其data,grad.data不会计算图
        w.data = w.data - 0.01 * w.grad.data
        # 将w的梯度值清零
        w.grad.data.zero_()
        # 注意l也是张量,需要使用item()取值
    print("progress:", epoch, l.item())

print("predict (after training)", 4, forward(4).item())


backward():用于自动计算图中所有张量的梯度(偏导数)然后存入对应张量中的grad中

item():用于从包含单个元素的张量中取出该元素值,并保持该元素的类型不变

w.grad.data.zero_():将w的梯度值清零,防止累积造成空间浪费

grad和data都是torch的属性,可以直接调用

注意:grad也是一个张量。grad.data取到其data,grad.data不会生成计算图,使用item()有等同效果。

练习(代码实现)


矩阵手册:http://faculty.bicmr.pku.edu.cn/~wenzw/bigdata/matrix-cook-book.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1685_Excel的几种脚本处理方式

全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结,实际上是写的我自己学习的过程。 关于Excel的处理方式很多,我也不会那么多,在这里我只想写一下我自己接触过的。大致是三种方式&a…

Pikachu靶场(Cross-Site Scripting)

Cross-Site Scripting 反射型xss(get)源代码修改限制地址栏 反射性xss(post)存储型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c…

《花雕学AI》25:用文字画出你的非凡想象力,微软新Bing带你体验DALL-E的神奇

你有没有想过用文字来画画?这听起来可能很不可思议,但是现在,你可以通过微软新Bing来实现这个想法。微软新Bing支持AI绘画功能,只要输入一句话,就能生成一幅图像。这个功能是由DALL-E驱动的,DALL-E是一个能…

mybatis03-多表查询、延迟加载、逆向工程

mybatis03 mybatis 多表联查 背景产生:开发过程中单表查询 不能满足项目需求分析功能。对于复杂业务来说,关联的表有几张,甚至几十张 并且表与表之间的关系相当复杂。目的:实现复杂业务功能,必须进行多表查询&#x…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner(可视化GUI编程)的使用与注册 获取链接:1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接: https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

WebSocket 通信 —— 浏览器原生支持

在上一篇内容中讲到使用Node中的Net核心模块完成socket通信,那么本篇就继续来讲关于浏览器原生支持的 WebSocket ,实现通信。那么什么是 WebSocket ? 它是HTML5开始提供的一种浏览器与服务器间进行全双工(全双工:同时进行双向传输…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数(图文结合) 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

asp.net+C#房地产销售系统文献综述和开题报告+Lw

本系统使用了B/S模式,使用ASP.NET语言和SQL Server来设计开发的。首先把所有人分为了用户和管理员2个部分,一般的用户可以对系统的前台进行访问,对一般的信息进行查看,而注册用户就可以通过登录来完成对房屋信息的查看和对房屋的…

动态通讯录——C语言【详解+全部码源】

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:进阶C语言,本专栏主要讲解数据存储,进阶指针,动态内存管理&a…

企业数据安全能力建设思路

在现代社会,企业数据安全已经成为一个非常重要的话题。企业数据安全能力的建设是每个企业都必须面对和解决的问题。企业数据安全能力建设思路包括以下几个方面: 1. 建立完善的安全管理制度 企业要建立完善的安全管理制度,包括信息安全政策、…

[入门必看]数据结构5.1:树的基本概念

[入门必看]数据结构5.1:树的基本概念 第五章 树与二叉树5.1 树的基本概念知识总览5.1.15.1.2 树的定义和基本术语5.1.3 树的性质 5.1.15.1.2 树的定义和基本术语树的基本概念树形逻辑结构的应用结点之间的关系描述结点、树的属性描述有序树 V.S 无序树树 V.S 森林 5…

软考 软件设计师上午题uml

UML uml事物依赖关系关联聚合组合关系泛化关系实现关系关联多重度UML类图UML 类图的概念对象图用例图包含关系扩展关系泛化关系用例图概念交互图通信图![在这里插入图片描述](https://img-blog.csdnimg.cn/d62c6f00d57a48949e3306461f3fbe25.png)通信图例子状态图状态图的状态和…

# 生成器

生成器 生成器是什么? 生成器(generator)是一种用来生成数据的对象。它们是普通函数的一种特殊形式,可以用来控制数据的生成过程。 生成器有什么优势? 使用生成器的优势在于它们可以在生成数据的同时控制数据的生成过程…

android ContentObserver实时监测媒体图片增删改,java(1)

android ContentObserver实时监测媒体图片增删改,java&#xff08;1&#xff09; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /> impl…

七、JS07使用 jQuery 操作 DOM

七、使用 jQuery 操作 DOM 7.1 DOM 操作 7.1.1 DOM 操作分类 使用 JavaScript 操作 DOM 时分为三类——DOM Core(核心)、HTML-DOM 和 CSS-DOMjQuery 操作也同样分为这三类下面主要回顾以下 JavaScript 中的 DOM 操作 JavaScript 中的 getElementById()、getElementByTagName…

c++内联函数inline

目录 内联函数的概念&#xff1a; 内联函数的用法&#xff1a; 内联的优点&#xff1a; 内联的缺点&#xff1a; 内联的使用场景 内联注意事项&#xff1a; 内联函数的概念&#xff1a; C中内联&#xff08;inline&#xff09;是一种关键字&#xff0c;用于告诉编译器把函…

以太网和DNS

以太网 数据链路层考虑的是相邻俩个节点之间的传输(通过网线/光纤/无线直接相连的设备),数据链路层中最典型的协议就说"以太网" 以太网协议规定了数据链路层,也规定了物理层的内容,我们使用的网线,也叫做"以太网线"(遵守以太网协议的网线) 以太网帧格式…

使用RecyclerView开发TabView

github链接 demo代码 效果图 这个功能是使用RecyclerView开发的&#xff0c;需要解决下面这些问题 单个item滚动的问题&#xff1a;左边的view需要固定、手指松开之后&#xff0c;惯性的处理滑动布局子View事件分发冲突的解决多个item联合滚动滚动header解决itemView与Recycl…

【MYSQL】表的增删改查(进阶)

文章目录 &#x1f337; 1. 数据库约束⭐ 1.1 约束类型⭐ 1.2 NULL约束⭐ 1.3 UNIQUE&#xff1a;唯一约束⭐ 1.4 DEFAULT&#xff1a;默认值约束⭐ 1.5 PRIMARY KEY&#xff1a;主键约束⭐ 1.6 FOREIGN KEY&#xff1a;外键约束⭐ 1.7 CHECK约束&#xff08;了解&#xff09; …

实在智能创意沙画引爆第25届“海博会”,数字员工为电商超自动化转型加“数”

4月18日&#xff0c;由中国纺织工业联合会、中国服装协会、中国服装设计师协会、台湾纺织业拓展会主办&#xff0c;石狮市人民政府指导的第二十五届海峡两岸纺织服装博览会暨科技成果交易会&#xff08;下称“海博会”&#xff09;在石狮市举行。本届海博会以“融合创新、共享时…