【PyTorch】1.2 PyTorch中的autograd

Pytorch自定义求导:Extending torch.autograd Normally, pytorch can automatically achieve the gradient computation, i.e., autograd. However, if we define a loss function including some complex operations,the autogradmechanicsdon't work. Thus... 阅读详情

学习目标:

  • 掌握自动求导中的Tensor概念和操作
  • 掌握自动求导中的梯度Gradients概念和操作
  • 在整个Pytorch框架中,所有的神经网络本质上都是一个autograd package(自动求导工具包)
  • autograd package提供了一个对Tensors上所有的操作进行自动微分的功能

关于torch.Tensor

  • torch.Tensor是整个package中的核心类,如果将属性.requires_grad设置为True,它将追踪在这个类上定义的类上定义的所有操作,当代码要进行反向传播的时候,直接调用.backward()就可以自动计算所有的梯度。在这个Tensor上的所有梯度将被累加进属性.grad中。
  • 如果想终止一个Tensor在计算图中的追踪回溯,只需要执行.detach()就可以将该Tensor从计算图中撤下,在未来的慧诉计算中也不会在计算该Tensor
  • 除了detach()如果想终止对计算图的回溯,也就是不再进行方向传播求导数的过程,也可以采用代码块的方式with torch.no_grad():,这种方式非常适用于对模型进行预测的时候,因为预测阶段不再需要对梯度进行计算

torch.Function

  • Function类是和Tensor类同等重要的一个核心类,它和Tensor共同构建了一个完整的类,每一个Tensor拥有一个.grad_fn属性,代表引用量能够具体的Function创建了该Tensor
  • 如果某个张量Tensor是用户自定义的,则其对应的grad_fn is None

关于Tensor的操作

import torch
x1=torch.ones(3,3)
print(x1)

x=torch.ones(2,2,requires_grad=True)
print(x)

#在具有requires_grad=True的Tensor上进行加法操作
y=x+2
print(y)
print(x.grad_fn)
print(y.grad_fn)
a=torch.randn(2,2)
a=((a*3)/(a-1))
print(a)
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
print(a)
b=(a*a).sum()
print(b)
print(b.grad_fn)
#输出
tensor([[ 1.3117, -2.9088],
        [ 1.4760,  1.3805]])
False
True
tensor([[ 1.3117, -2.9088],
        [ 1.4760,  1.3805]], requires_grad=True)
tensor(14.2663, grad_fn=<SumBackward0>)
<SumBackward0 object at 0x00000200375D3CC8>

关于梯度Gradients

在Pytorch中,反向传播是依靠.backward()实现的

out.backward()

完整代码

import torch
x1=torch.ones(3,3)
print(x1)

x=torch.ones(2,2,requires_grad=True)
print(x)

#在具有requires_grad=True的Tensor上进行加法操作
y=x+2
print(y)
print(x.grad_fn)
print(y.grad_fn)

z=y*y*3
out=z.mean()
print(z)
print(out)
out.backward()
print(x.grad)

关于自动求导的属性设置

可以通过设置.requires_grad=True来执行自动求导,也可以通过代码块的限制来停止自动求导

print(x.requires_grad)
print((x**2).requires_grad)
with torch.no_grad():
    print((x**2).requires_grad)
#输出
True
True
False

可以通过.detach()获得一个新的Tensor,拥有相同的内容但不需要自动求导

print(x.requires_grad)
y=x.detach()
print(y.requires_grad)
print(x)
print(y)
print(x.eq(y).all())
#输出
True
False
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
tensor([[1., 1.],
        [1., 1.]])
tensor(True)

避免在代码里大量使用detach

吴恩达深度学习专项课程 5 大模块:从 TensorFlow 1.x 到 PyTorch 2.0 的迁移实践 本文详细介绍了吴恩达深度学习专项课程从TensorFlow 1.x到PyTorch 2.0的迁移实践,涵盖5大核心模块的改造过程。通过对比新旧框架的特性差异,提供代码示例和优化技巧,帮助开发者掌握现代深度学习技术,提升模型性能和开发效率。 阅读详情

相关推荐

PyTorch 2框架核心优化与实战指南

深度学习框架通过抽象底层计算细节,大幅提升了模型开发效率。PyTorch作为动态图框架的代表,其即时执行模式为研究人员提供了灵活的调试体验。PyTorch 2通过引入TorchDynamo编译器技术,创新性地实现了动态图到静态图的转换,在保持开发灵活性的同时获得接近静态图的执行效率。这种编译器优化技术特别适合计算机视觉和自然语言处理任务,能显著提升Transformer等复杂模型的训练速度。在实际工程中,配合CUDA环境配置和混合精度训练,PyTorch 2可降低30%以上的显存占用,同时实现1.3-2倍的

weixin_33674976的博客 370

Anaconda在哪下载?Anaconda保姆级安装下载教程

许多人不知道Anaconda怎么下载。这里统一解答一下~!可以直接从 Anaconda官网下载,但因为Anaconda的服务器在国外,所以下载速度会很慢,这里推荐使用清华的镜像来下载。选择合适你的版本下载,我这里选择Anaconda3-5.1.0-

gu1857035894的博客 2326

PyTorch中autograd.Function.apply的5个实战技巧(附自定义ReLU实现)

本文深入解析PyTorch中autograd.Function.apply的5个实战技巧,包括核心作用理解、跨版本兼容策略、ctx对象进阶用法等,并附有自定义ReLU的工业级实现。通过具体代码示例和性能优化建议,帮助开发者高效实现自定义微分规则,提升模型训练效率。

weixin_29053073的博客 217

Pytorch教程入门系列4----Autograd自动求导机制

Autograd让你爱上深度学习

weixin_46417939的博客 6万+

macOS Jdk1.8安装(目前主流版本的jdk)

添加环境环境变量,类似于windows的高级设置中path配置的环境变量。查看 JAVA_HOME 目录。查看 JDK 版本信息。一直下一步安装就好了。在终端的根目录下运行。

m0_50207524的博客 9356

软件工程导论实践:从需求到架构的机票预订系统全流程解析

本文深入解析机票预订系统从需求分析到架构设计的全流程实践,涵盖业务流程、功能建模、模块化设计、性能优化等关键环节。通过实际项目经验,分享软件工程导论在复杂系统开发中的应用技巧,包括数据流图绘制、E-R图设计、微服务架构及高并发处理等实战策略,助力开发者构建高效可靠的机票预订系统。

weixin_29202213的博客 414

PyTorch学习教程(二)-------Autograd:自动微分

%matplotlib inline Autograd:自动微分 autograd package是PyTorch神经网络的核心。我们先简单看一下,然后开始训练第一个神经网络。 autograd package为张量的所有operations(操作或运算)提供了自动微分。它是一个define-by-run框架,意思是说你的反向传播(backpropagation)是由 如何运行代码 定义的,并且...

步步心愿的博客 1109

自动权重化图卷积网络(Auto-Weighted GCN)算法在反洗钱识别中的应用及代码实现

该算法通过自动学习节点之间的权重信息,能够更好地捕捉AML数据中的关系和结构,从而提高反洗钱识别的准确性和效果。传统的AML识别方法通常依赖于专家定义的规则和手动提取的特征,但这些方法在应对大规模和复杂的数据时存在一定的局限性。GCN通过在图上执行卷积操作来捕捉节点之间的关系和结构信息,从而实现对图数据的学习和表示。自动权重化图卷积网络是一种基于GCN的改进算法,能够自动学习节点之间的权重信息,从而更好地捕捉图中的关系。利用自动计算的权重值执行图卷积操作。根据节点之间的相似度,计算每个节点的权重。

syntax_api860的博客 378

深入浅出PyTorch: pytorch教程

Module类是torch.nn模块里提供的一个模型构造类(nn.Module),是所有神经网络模块的基类,我们可以继承它来定义我们想要的模型pytorch模型定义应包括两个主要部分:各个部分的初始化(__init__);数据流向定义(forward)基于nn.Module,我们可以通过SequentialModuleList和ModuleDict三种方式定义pytorch模型。

惟天有汉,故国有明的博客 7130

YOLOv8【项目实战四】遥感图像目标检测:应对特殊场景的挑战,如何处理遥感图像通常具有的大尺寸、多尺度、方向多变等特点,并对 YOLOv8 进行相应调整(含源码)

遥感图像目标检测优化策略 核心挑战 图像尺寸大:遥感图像通常达数万像素,直接缩放导致小目标丢失 多尺度目标:同一图像包含几十像素的小目标和跨图像的大目标 方向多样性:目标360度任意旋转,水平框检测效果差 优化解决方案 滑动窗口分块处理: 采用1024x1024窗口大小 设置20%-30%重叠率防止边界漏检 全局坐标转换实现检测结果拼接 多尺度特征融合: 改进FPN结构增强小目标检测 自适应感受野处理不同尺寸目标 上下文信息聚合提升检测精度 旋转目标检测: 引入旋转边界框表示 角度预测分支增强方向感知 旋转

深耕 Vue 生态与 JS/TS 技术,聚焦组件封装、响应式原理、TS 类型设计,解析工程化配置与性能优化方案。同时分享 YOLOv8 目标检测实战、AI 大模型面试核心考点,以代码实例拆解技术实现与业务解法。 619

Python爬虫实战:基于最新技术爬取国家企业信用信息公示系统数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的国家企业信用信息公示系统爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、数据解析与存储等高级话题,最终实现一个完整的爬虫系统。文章包含大量实战代码示例,适合中高级Python开发者学习参考。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和商业情报收集等领域。通用爬虫:如搜索引擎爬虫,广泛抓取互联网公开信息聚焦爬虫:针对特定领域或网站的数据采集增量式爬虫:只抓取更新内容,减少资源消耗。

2201_76125261的博客 2410

PyTorch入门——(黑马程序员视频学习笔记)

对比有无初始化的矩阵:当声明一个未初始化的矩阵时,它本身不包含任何确切的值。当创建一个未初始化的矩阵时,分配给内存中有什么数值就赋值给了这个矩阵,本质上是毫无意义的数据.

zhang_ysx的博客 925

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5576

PyTorch 1.0 系列学习教程(2): autograd

PyTorch 1.0:autograd AUTOGRADPyTorch:Tensors and autogradPyTorch:Defining new autograd functionsTensorFlow:Static Graphs参考 AUTOGRAD PyTorch:Tensors and autograd 上一篇的examples中,我们不得不手工实现网络的前向和反向传播. 手工实现...

gukedream的专栏 4555

SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)

上面在使用OpenOffice实现doc、excel、ppt等文档的管理和预览。除此之外可用kkFileView实现包括且更多文档的预览。

BADAO_LIUMANG_QIZHI的博客 1万+

Google Earth Engine(GEE)——全球影像数据正确下载方式和注意事项

今天看到有人担心全球影像能不能下载的问题? 有时候我们会用到全球的数据,但是如何下载全球的数据呢? 首先如果没有全球的矢量边界我们会不会无法下载全球的数据,答案当然是可以的,因为我们在边界筛选的过程中filterBounds(),就是为了筛选边界,当我们不进行边界筛选的时候,自然而然默认的边界范围就是全球的,但是紧接着会面临其他两个问题:1如何下载?2如何在不缩小分辨率的情况下下载成功? 对于第一个问题我们如何下载?还是按照正常的逻辑利用export直接倒出到Google硬盘当中, 代码:

此星光明博客 3773

PyTorch入门教程1.2 - Autograd: 自动微分

Autograd: 自动微分 PyTorch中所有神经网络的中心是autograd包。我们首先简单地看下这个包,然后来训练我们的第一个神经网络。 autograd包可以对所有在Tensors上进行的操作进行自动微分(differentiation)。它是一个由运行定义(define-by-run)的框架,意味着你的反向传递是由你的代码运行过程来定义的,并且每个单步的迭代都可以被微分。 让我们用更简...

anhec的博客 442

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PyTorch 1.0 基础教程(2):autograd: 自动微分器

PyTorch 1.0 基础教程(2):autograd: 自动微分器张量梯度更多参考 所有在PyTorch神经网络的核心是autograd包. 让我们来简要地观察一下这个,我们将先去训练我们的神经网络. autograd包为所有在张量上的操作提供自动微分.auto是一个通过运行来定义(define-by-run)的框架,意味着你的反向传播有你运行的代码定义,同时,每个迭代都可以不一样. 接下来我...

gukedream的专栏 3296

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

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

PyTorch深度学习入门 Tensor基础 1.2 Autograd 1. 微分示例

PyTorch深度学习入门 Tensor基础 1.2 Autograd 1. 微分示例

代码改变世界 195

PyTorch版本兼容性指南:Deformable-Convolution-V2-PyTorch在v0.4.1与v1.0.0的适配方案

Deformable-Convolution-V2-PyTorch是实现Deformable ConvNets V2 (DCNv2)的PyTorch项目,本文将详细介绍该项目在PyTorch v0.4.1与v1.0.0版本间的适配方案,帮助开发者轻松解决版本兼容性问题。 ## 版本差异核心问题解析 PyTorch从v0.4.1到v1.0.0的升级带来了诸多API变化,对Deformable-C

gitblog_02961的博客 1256

PyTorch深度学习入门 Tensor基础 1.2 Autograd 2. 基本原理

PyTorch深度学习入门 Tensor基础 1.2 Autograd 2. 基本原理

代码改变世界 178

【Pytorch】基于torch.autograd.Function类自定义网络层

torch.autograd.Function是pytorch中用于自定义张量操作函数的类,通过实现forward和backward方法分别定义前向计算和反向求导过程,从而实现自定义网络层在整个动态流图中计算的传递。 先贴一张官方说明: 在自定义时,主要遵循如下流程和原则: (1)forward和backward均为静态方法,其第一个参数必须为ctx(官方示例,可自定义名称)上下文管理器变量。在...

guofei_fly的博客 1543

PyTorch深度学习入门 Tensor基础 1.2 Autograd 3. 前向传播 4. 反向传播 5. 非标量输出

PyTorch深度学习入门 Tensor基础 1.2 Autograd 3. 前向传播 4. 反向传播 5. 非标量输出

代码改变世界 342

PyTorch 2.0 损失函数实战:3大场景对比与反向传播梯度可视化

本文深入解析PyTorch 2.0中三种核心损失函数(交叉熵、MSE、L1)在不同深度学习场景下的应用差异,并通过反向传播梯度可视化技术揭示其工作原理。文章包含实战代码示例,帮助开发者理解损失函数选择对模型训练的影响,优化深度学习模型的性能。

weixin_32285357的博客 230

分别使用numpy和pytorch进行图像傅里叶变换和频域分析

本文使用numpy和pytorch分别操作,对图像进行fft变换和ifft变换,以实现图像的频域分析。pytorch的fft功能在1.7.1版之后才完善,支持CUDA和autograd,可以加入到神经网络中实现一些有趣的操作。

Brikie的博客 2万+

pytorch如何计算导数_如何使用PyTorch计算偏导数?

I want to use PyTorch to get the partial derivatives between output and input. Suppose I have a function Y = 5*x1^4 + 3*x2^3 + 7*x1^2 + 9*x2 - 5, and I train a network to replace this function, then I...

weixin_39934302的博客 1019
上一篇: 【PyTorch】1.1认识Pytorch
下一篇: 【PyTorch】2.1 使用Pytorch构建一个神经网络
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值