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

这篇具有很好参考价值的文章主要介绍了Pytorch深度学习笔记(五)反向传播算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

2.二层神经网络

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

4.张量Tensor


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

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

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

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

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

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

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

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

2.二层神经网络:

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

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

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

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

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

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

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

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

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

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

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

如图,根据链式法则,得到,进行w更新。L为损失值Loss。

(2)具体实现过程

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

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

练习1:

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

 答案为-8

练习2:

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

 答案为2 ,2

4.张量Tensor

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

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

线性模型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()有等同效果。

练习(代码实现)

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


矩阵手册:http://faculty.bicmr.pku.edu.cn/~wenzw/bigdata/matrix-cook-book.pdf文章来源地址https://www.toymoban.com/news/detail-420857.html

到了这里,关于Pytorch深度学习笔记(五)反向传播算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】4-2 误差反向传播法 - 简单层的实现(层的介绍)

    下面把构建神经网络的“层”实现为一个类。这里所说的“层”是神经网络中功能的单位。 下面先从一些简单的层开始介绍 层的实现中有两个共通的方法(接口) forward() 和 backward() 。 forward() 对应正向传播 backward() 对应反向传播 现在来实现乘法层。看下面代码 backward()将从上

    2024年02月09日
    浏览(38)
  • 机器学习17:训练神经网络-反向传播算法

    反向传播算法对于快速训练大型神经网络至关重要。本文将介绍算法的工作原理。 目录 1.简单的神经网络 2.激活函数 3.错误函数 4.正向传播 4.1 更新隐藏层 5.反向传播 5.1 求导数

    2024年02月12日
    浏览(54)
  • pytorch(三)反向传播

    前馈过程的目的是为了计算损失loss 反向传播的目的是为了更新权重w,这里权重的更新是使用随机梯度下降来更新的。 前馈过程 反馈过程 运行结果 在神经网路中,经常对线性的结果做一个非线性函数的变幻的展开,这就是激活函数。激活函数可以使得模型具有非线性。激活

    2024年01月24日
    浏览(39)
  • pytorch 前向传播与反向传播代码+ fp16

    optim.zero_grad() : 将模型的梯度参数设置为0,即清空之前计算的梯度值,在训练模型过程中,每次模型反向传播完成后,梯度都会累加到之前的梯度值上,如果不清空,这些过时的梯度将会影响下一次迭代的结果。因此,使用 optim.zero_grad() 来清空梯度避免这种情况的发生。保证

    2024年02月05日
    浏览(45)
  • [pytorch] 8.损失函数和反向传播

    torch提供了很多损失函数,可查看官方文档Loss Functions部分 作用: 计算实际输出和目标输出之间的差距 为更新输出提供一定的依据(反向传播),grad 损失函数用法差不多,这里以L1Loss和MSEloss为例 L1Loss 注意传入的数据要为float类型,不然会报错,所以inputs和outputs处要加上类

    2024年01月25日
    浏览(37)
  • PyTorch:梯度计算之反向传播函数backward()

    计算图,是一种用来描述计算的有向无环图。 我们假设一个计算过程,其中 X 1 mathbf{X_1} X 1 ​ 、 W 1 mathbf{W_1} W 1 ​ 、 W 2 mathbf{W_2} W 2 ​ 、 Y mathbf{Y} Y 都是 N N N 维向量。 X 2 = W 1 X 1 mathbf{X_2} = mathbf{W_1}mathbf{X_1} X 2 ​ = W 1 ​ X 1 ​ y = W 2 X 2 mathbf{y} = mathbf{W_2}mathbf{X_2} y

    2023年04月09日
    浏览(40)
  • 深度学习之反向传播

    (在pytorch包中)Tensor数据成员:data(存放数据w,也是Tensor变量,但是取data不会构建计算图)和grad(存放梯度loss对w的导,调用bacward之后grad也是个Tensor,每次引用结束要zero) backward会释放计算图,每一次运行神经网络时计算图可能是不同的,所以没进行一次反向传播就释放

    2024年02月16日
    浏览(35)
  • 误差反向传播算法

    通过单个感知机或者单层神经网络只能够实现线性分类的问题,而多层神经网络可以解决非线性分类问题。 神经网络中的模型参数,是神经元模型中的连接权重以及每个功能神经元的阈值, 这些模型参数并不是我们人工设计或者指定的,而是通过算法自动学习到的。 和其他

    2024年02月06日
    浏览(35)
  • Pytorch反向传播——optimizer.zero_grad(), loss.backward(), optimizer.step() 作用

    在 PyTorch 中,optimizer.zero_grad() 用于清空优化器中的梯度。通常,在进行一次反向传播计算之前,我们需要先清空优化器中的梯度。这是因为 PyTorch 默认会在反向传播时累加梯度,而不是覆盖之前的梯度,因此我们需要先清空梯度,再进行反向传播计算。 具体来说,optimizer.

    2024年02月11日
    浏览(40)
  • 机器学习 day27(反向传播)

    1. 导数 函数在某点的导数为该点处的斜率,用height / width表示,可以看作若当w增加ε,J(w,b)增加k倍的ε,则k为该点的导数 2. 反向传播 tensorflow中的计算图,由有向边和节点组成。从左向右为正向传播,神经网络模型使用正向传播来输出结果 从右向左为反向传播,tensorflow使用

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包