pytorch(三)反向传播

pytorch(三) Back Propagation 反向传播 (附详细代码+图解计算图) Back Propagation反向传播 前言:小案例 我们有这么一个等式 e=(a+b)∗(b+1)e=(a+b)*(b+1)e=(a+b)∗(b+1) 求:e对a的导数 以及 e对b的导数 如果仅仅从数学的角度计算,这是非常简单的,但在深度学习中,我们会遇到许多更加复杂的计算,纯靠数学解析式来计算是十分困难的,我们需要借助 Back Propagation(反向传播)来得到答案 刚刚的等式只... 阅读详情

反向传播

  • 前馈过程的目的是为了计算损失loss
  • 反向传播的目的是为了更新权重w,这里权重的更新是使用随机梯度下降来更新的。

前馈过程

在这里插入图片描述
反馈过程

在这里插入图片描述

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

w=torch.Tensor([1.0])
# 表示需要计算梯度,默认不需要计算梯度
w.requires_grad=True

def forward(x):
    return x*w # w是tensor类型,则运算会被重载成tensor之间的运算,x会被自动类型转换为tensor类型

def loss(x,y):
    y_pred=forward(x)
    return (y_pred-y)**2

print('predict before:',4,forward(4).item())

for epoch in range(100):
    for x,y in zip(x_data,y_data):
        # 前馈过程
        l=loss(x,y)
        # 反馈过程,会自动计算,存储在w中,完成存储后释放计算图
        l.backward()
        print('\tgrad:',x,y,w.grad.item())
        # 权重更新,使用data标量,grad也是tensor
        w.data=w.data-0.01*w.grad.data
        # 权重中的梯度数据清零
        w.grad.data.zero_()
        
    print('progress:',epoch,l.item())
    
print('predict after:',4,forward(4).item())

运行结果
在这里插入图片描述

在神经网路中,经常对线性的结果做一个非线性函数的变幻的展开,这就是激活函数。激活函数可以使得模型具有非线性。激活函数给神经元引入了非线性因素,神经网络就可以毕竟任意的非线性函数。如果不增加激活函数,模型展开之后还是线性模型,就还是只有一层。

tensor的广播机制

在tensor的使用过程中,我们经常需要对不同形状的tensor进行计算,这个时候就需要用到tensor的广播机制

tansor的广播机制就是在不同的rensor之间进行计算时,自动将数据进行扩展的一种方式。简单来说,就是当两个tensor的形状不同时,tensor会自动的将自己的形状扩展为另一个tensor的相同形状,然后进行计算。通常情况下,小一点的数组会被广播成大一点的数组,这样才能保持大小一致。

tensor的广播机制需要遵循以下规则:

  • 每个tensor至少有一个维度
  • 遍历tensor所有维度时,从末尾开始遍历(从右向左),两个tensor可能存在以下情况
    • tensor维度相同
    • tensor维度不同但是其中一个维度为1
    • tensor维度不等且其中一个维度不存在

满足以上规则的tensor可以进行广播,维度扩展的过程就是将数值进行复制的过程。示例如下

import torch

a=torch.Tensor([1,2,3])
b=torch.Tensor([[1],[2],[3]])
# b=torch.Tensor([2,3])
c=a+b
print('c',c)
c=b+a
print('c',c)

运行结果

c tensor([[2., 3., 4.],
        [3., 4., 5.],
        [4., 5., 6.]])
c tensor([[2., 3., 4.],
        [3., 4., 5.],
        [4., 5., 6.]])

有如下情况是不可以进行广播的:

  • 参与运算的tensor维度不等但是其中没有一个的维度为1
  • 参与运算的tensor其中一个没有任何维度,示例如下

在这里插入图片描述

在这里插入图片描述

ps:这种广播机制并不是tensor独有的,numpy数组也可以广播,详情可以查看 numpy的广播机制

PyTorch自动微分机制深度解析:从原理到实践掌握反向传播精髓(三) 使用示例。 阅读详情

相关推荐

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 204

Pytorch基础|数据并行(DP)以及其Pytorch实现

这篇文章将深入数据并行(Data Parallel,即常说的DP)的原理,并解析数据并行在Pytorch中的实现。

weixin_49659123的博客 3449

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 294

pytorch多个反向传播

pytorch多个反向传播 标签: pytorch 之前我的一篇文章pytorch 计算图以及backward,讲了一些pytorch中基本的反向传播,理清了梯度是如何计算以及下降的,建议先看懂那个,然后再看这个。 从一个错误说起:RuntimeError: Trying to backward through the graph a second time, but the buffers h...

CoderWangSon 9013

为ESXI Host添加v3700 FC存储

物理环境: ESXI Host version 5.1.0 Brocade SAN Switch v3700 Storage 存储和ESXI Host分别用光纤线连接在SAN交换机上 1.查询ESXI Host 的WWN号: 2. SAN交换机上查询存储的WWPN号 SAN交换机: 3.建立zone,添加到cfg文件中 brocade8Gb

haoshuwei531024的专栏 7562

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6720

PyTorch学习(三)--反向传播

教程视频:https://www.bilibili.com/video/av93365242 本期教学视频讲的是关于反向传播的过程 其中y=w*x线性模型,用pytorch实现反向传播代码如下: import numpy as np import matplotlib.pyplot as plt import torch x_data = [1.0,2.0,3.0] y_data = [2.0,...

weixin_44841652的博客 1万+

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 174

pytorch之反向传播(三)

反向传播反向传播算法原理关于层与层之间的顺序 反向传播算法 反向传播算法,简称BP算法,适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。 看下面这张图,当我们面对这样复杂的数据关系时,如果想用解析式写出他们之间的关系,可能很难达到,那么我们想是否有这样一个算

[ 25'h ] 782

Java代码变更影响分析:从静态解析到动态调用图的实战全链路

本文介绍了Java代码提交影响分析的核心原理与实现方法。主要内容包括:1)静态分析技术,通过JavaParser解析AST构建调用图,记录类与方法间的调用关系;2)动态分析技术,使用ByteBuddy进行字节码增强,捕获运行时调用路径;3)JCCI工具实现,结合javalang、unidiff等技术分析代码改动影响,并将结果存储到SQLite数据库。文章提供了完整的代码示例,展示了从AST解析、动态调用跟踪到实际工具应用的完整技术栈,为代码变更影响分析提供了实用解决方案。

墨夶的博客 1252

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。

flypig has a dream! 6863

[Pytorch] 学习记录(三)反向传播

反向传播是神经网络中非常重要的一个算法,它可以在图上进行梯度传播。如图是最简单的神经网络,ω为权重存在于模型中,是我们要训练的目标。y为最终的输出,*为进行计算的地方。在训练的时候实际上就是对ω权重进行更新,更新的时候是在计算Loss对权重的导数。 图1 最简单的神经网络 梯度下降的完整公式为,而导数部分经推导可得。对于简单的模型我们可以用上面的解析式方法去做,但是对于复杂的模型就不能再这样做了。 图2 复杂的模型 如图2,每一个圆圈里都有一个自己的ω,权重数量非常多。 ...

m0_55080712的博客 1145

深度测评:Accio Work——目前普通用户最友好的多 Agent 协同工具

摘要:Accio Work是阿里国际站推出的多Agent协同工具,通过借鉴古代"三省六部制"构建高效协作框架。该工具支持主流大模型,可配置专业Agent角色,实现40分钟内完成复杂产品PRD等高效协作。其亮点在于直观的UI设计和流程驱动机制,能强制各Agent从专业视角深度思考。虽然超长对话稳定性有待优化,但作为目前最用户友好的多Agent工具,显著降低了构建复杂AI团队的门槛,成为提升个人和小微企业生产力的利器。

Maynor的博客 1734

Pytorch深度学习(三):反向传播

反向传播一、概念二、代码如下: 一、概念 Tensor:data 和 grad w.data w.grad.data:数值计算,不构建计算图。 w.grad.item():取出数值。 w.grad.data.zero():清零。 训练的目的,是为了让损失更小,即在训练过程中不断更新ω的值,以使得loss最小。 所以我们在梯度下降的过程中,就是观察,并使其取向最小的趋势训练。 根据上一节我们可以得到一般简单的线性更新计算的解析式为: Update为: 其中,α称为学习率。(采用贪心策略) 对应的Loss F

qq_42585108的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

三、PyTorch 深度学习 反向传播

第4讲 反向传播back propagation 来源:B站 刘二大人 import torch x_data = [1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0] w = torch.Tensor([1.0]) # w的初值为1.0 w.requires_grad = True # 需要计算梯度 def forward(x): return x * w # w是一个Tensor def loss(x, y): y_pred = forwar

weixin_46087812的博客 254

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Pytorch学习(三)反向传播

训练的目的,是为了让损失更小,即在训练过程中不断更新ω的值,以使得loss最小。 所以我们在梯度下降的过程中,就是观察,并使其取向最小的趋势训练。 根据上一节我们可以得到一般简单的线性更新计算的解析式为: Update为: 其中,α称为学习率。(采用贪心策略) 对应的Loss Function: 但是对于我们常用的复杂的网络时,如果还是按照上述的求解ω方法...

weixin_44425647的博客 390

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PyTorch入门(三)损失函数与反向传播

误差函数与反向传播(误差函数、梯度下降、优化器)

1900的博客 6674

Pytorch(三) --反向传播

整体上来说,和上一节的梯度下降法差不多,不过这次是用Pytorch实现的,调用了其中的一些方法。 需要注意的事项: ①Tensor中包含data和grad,其中data和grad也是Tensor。在更新w.data时,也需要使用w.grad.data。 ②与Tensor做运算后得到的值,也是Tensor类型的。 ③l.backward()方法会把计算图中所有需要梯度的地方求出来,然后存到对应的参数中,最终将计算图释放。 本次针对 y = w1*x^2+w2 *x+b,利用反向传播算法,求出近似的解。 代码

starlet_kiss的博客 384

pytorch学习笔记(三):反向传播

关于前馈和反相传播的原理,下面这张实例非常清楚: import torch import matplotlib.pyplot as plt x_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6.0] w = torch.Tensor([1.0]) w.requires_grad = True # 需要计算梯度 def forward(x): return x * w def loss(x, y): y_pred = forward(x) re

兴趣使然的创作者 727

Pytorch深度学习实践(三):反向传播

概念: import torch torch.Tensor()是python类,是默认张量类型FloatTensor()的别名,会调用构造函数并且生成单精度浮点型的张量。 张量的例子: 对于机器学习训练的目的就是为了调整ω的值,致使损失不断减少,因此在上节课(https://blog.youkuaiyun.com/HaiDian_Franky/article/details/119757342?spm=1001.2014.3001.5501)的学习过程中,对于复杂的网络模型,我们需要花费大量的时.

HaiDian_Franky的博客 782

PyTorch 深度学习之反向传播Back Propagation(三)

Pytorch深度学习系列 反向传播Back Propagation and 构建计算图

HETUW的博客 882

pytorch(三):梯度下降和反向传播

反向传播的思想就是对其中的某一个参数单独求梯度。

weixin_43747748的博客 115

(三)PyTorch深度学习:反向传播梯度下降

反向传播梯度下降

K_AAbb的博客 649

初始PyTorch(三):感知机&MLP反向传播

1.单层感知机 σ只有一个,其中。 求导过程: 2.多层感知机 ,其中 求导过程: 3.MLP反向传播

sleepinghm的博客 491

刘二PyTorch深度学习(三)--反向传播

反向传播

zhaoweiaier的博客 592

Pytorch入门深度学习实践(三)--反向传播算法

【代码】Pytorch入门深度学习实践(三)--反向传播算法。

weixin_43913071的博客 43
上一篇: pytorch(二)梯度下降算法
下一篇: pytorch(四、五、八)用pytorch实现线性回归和逻辑斯蒂回归(分类)以及多分类问题
@@老胡
博客等级 码龄7年 291粉丝 184原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值