P14 PyTorch AutoGrad

news2024/11/28 20:38:21

前言:

激活函数与loss的梯度

PyTorch 提供了Auto Grad 功能,这里系统讲解一下

torch.autograd.grad系统的工作原理,了解graph 结构


目录:

1: require_grad = False

2: require_grad =True

3: 多层bakcward 原理

4: index 的作用

5: 更复杂的例子


一 require_grad = False

我们创建了两个tensor :a,b

c=a*b

tensor 会为Tensor a,b,c 内部自动分配一些属性

data: 当前的数据

grad: 保存当前的梯度,非leaf 不保存。retain_graid

grad_fn: 指向backward graph中的Node

is_leaf : 是否为graph 中的leaf

requires_grad: 为True 的时候才会创建backwards grad

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 17:34:37 2023

@author: chengxf2
"""

import torch

def autograd():
    
    a = torch.tensor(2.0,requires_grad=False)
    b = torch.tensor(3.0,requires_grad=False)
    
    c =a*b
    
    grad_a =torch.autograd.grad(c,[a])
    print(a,grad_a)
    
autograd()

运行后回直接报错

因为 a 的require_grad 为 False,

所以没有对应的grad_fn 指向backwards graph


二 require_grad= True

Mul 函数 会创建一个上下文保存当前输入的Tensor:a,b

当a require_grad属性 设置成True

Tensor C的三个属性发生了变化

grad_fn = MulBackward

is_leaf = False

require_grad = True

MulBackward 的input 是ctx中保存的tensor,跟输入的a,b分别关联

是tuple 组成的list

tuple的结构是[Function, index]

[Accumulated Grad,0] 跟 Tensor a 关联

[None ,0] 跟 Tensor b 关联

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 17:34:37 2023

@author: chengxf2
"""

import torch

def autograd():
    
    a = torch.tensor(2.0,requires_grad=True)
    b = torch.tensor(3.0,requires_grad=False)
    
    c =a*b
    
    grad_a =torch.autograd.grad(c,[a])
    print(grad_a)
    
autograd()


三 多层bakcward 原理

c=a*b

e=c*d

其中因为c 是intermediate node, 非leaf,当

backward时候,不保存grad,直接把梯度传递到 其内部的grad_fn(MulBackward)

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 17:34:37 2023

@author: chengxf2
"""

import torch

def autograd():
    
    a = torch.tensor(2.0,requires_grad=True)
    b = torch.tensor(3.0,requires_grad=True)
    d = torch.tensor(4.0,requires_grad=True)
    c =a*b
    e =c*d
    
    grad_a,grad_b,grad_d =torch.autograd.grad(e,[a,b,d])
   
    print("grad_a: %d grad_b: %d  grad_d: %d"%(grad_a,grad_b,grad_d))
   
    
autograd()
    

为了防止tensor 运行期间发生变化增加了 _version 保护


四 index 的作用

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 17:34:37 2023

@author: chengxf2
"""

import torch

def autograd():
    
    a = torch.tensor([1.0,2.0,3.0],requires_grad=True)
    b,c,d= a.unbind()
    e =b*c*d
    grad_a =torch.autograd.grad(e,[a])
   
    print("grad_a:  ",grad_a)
   
    
autograd()
    

index 主要用于指向对应的backward graph 中的input的tensor索引


五 更复杂的例子

c= a*b

c.require_grad= True

e = c*d




# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 17:34:37 2023

@author: chengxf2
"""

import torch

def Forward():
    
    a = torch.tensor(2.0,requires_grad=False)
    b = torch.tensor(2.0, requires_grad=False)
    d = torch.tensor(2.0, requires_grad=False)
    f = torch.tensor(2.0, requires_grad=False)
    h = torch.tensor(2.0, requires_grad=True)
    
    c= a*b
    print("\n c:",c)
    c.requires_grad=True
    e= c*d
    print("\n e ",e)
    g= e*f
    print("\n g ",g)
    i =g/h
    print("\n i ",i)
    j = i+h
    k=j*i
    print("\n j ",j)
    print("\n k ",k)
    grad_c = torch.autograd.grad(k,[c])
    
    print("\n grad_c ",grad_c)
    m=k.detach()
    print("m ",m)
    
    
    

   
    
Forward()
    
    
    

输出:

i.reatin_graid(): 保证当前的梯度

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

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

相关文章

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事,本文我们继续介绍YOLO-V4版本。YOLO的作者在发表完V3之后,发现YOLO产品被美国军方应用到了很多军事战争当中,这是他所不希望看见的,因此宣布不再继续研究。但历史和科技总是随时间不断…

(第五章)OpenGL超级宝典学习:统一变量(uniform variable)

统一变量 前言 本篇在讲什么 本篇记录对glsl中的变量uniform的认知和学习 本篇适合什么 适合初学Open的小白 适合想要学习OpenGL中uniform的人 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 …

设计模式-组合模式和建筑者模式详解

一. 组合模式1. 背景在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如&#xf…

spring注解的开端(@Component替代bean标签的使用)

目录 一、介绍 1.什么是注解开发? 2.Spring注解的版本 3.基于spring注解的应用 4. Component的细分注解 5.相关注解 二、简单例子讲解 1.类打注解 2.扫描注解放入工厂 3.总工厂取注解调用 4.运行结果 总结: 一、介绍 1.什么是注解开发&…

人工智能聊天工具ChatGPT为Delphi写的诗歌

现在每个人似乎都在谈论 ChatGPT,所以这里有一首关于我们最喜欢的开发工具Delphi的好诗,来自 ChatGPT 生成的 Embarcadero 的 Delphi。 Delphi,哦,Delphi! 作者:ChatGPT Delphi,哦,…

java面试题(十九) Mybatis

4.1 谈谈MyBatis和JPA的区别 参考答案 ORM映射不同: MyBatis是半自动的ORM框架,提供数据库与结果集的映射; JPA(默认采用Hibernate实现)是全自动的ORM框架,提供对象与数据库的映射。 可移植性不同&…

166_技巧_Power BI 窗口函数处理连续发生业务问题

166_技巧_Power BI 窗口函数处理连续发生业务问题 一、背景 在生产经营的数据监控中,会有一类指标需要监控是否连续发生,从而根据其在设定区间中的连续频次来评价业务。 例如: 员工连续迟到天数。销售金额连续上升或者下降。用户连续登陆…

卧槽!一个小时不到就把ChatGPT接入了微信!被问疯了~

大家好,我是鸟哥。一个半路出家的程序员。 最近ChatGPT又火了,一时兴起就把它接入我的微信机器人中。从账号注册到接入微信机器人,全程不到1个小时就搞定了!当然不是我牛逼而是Github上的人才太多了。 大家聊的还是很嗨的&#…

Hadoop自动安装JDK

目录 1、使用xftp工具 在opt目录下创建install和soft文件 ​2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 4、 运行 5、测试 1、使用xftp工具 在opt目…

SpringBoot整合(二)MyBatisPlus技术详解

MyBatisPlus详解 一、标准数据层开发 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 MyBatisPlus的官网为:https://mp.baomidou.com/ 1.1 标准CRUD 1.2 新增 int insert (T t)T:泛型&#xff0c…

SAP SD模块相关表的知识笔记

VBAK表 销售凭证(抬头数据) 主键为VBELN: 销售凭证 常用的有: kunnr : 售达方 erdat: 记录创建日期 vdatu: 请求交货日期 VBAP表 (销售凭证:项目数据) 主键为 vbeln销售凭证 和posnr 行号 常用的有&#x…

2年功能测试月薪9.5K,100多天自学自动化,跳槽涨薪4k后我的路还很长...

前言 其实最开始我并不是互联网从业者,是经历了一场六个月的培训才入的行,这个经历仿佛就是一个遮羞布,不能让任何人知道,就算有面试的时候被问到你是不是被培训的,我还是不能承认这段历史。我是为了生存,…

leaflet加载KML文件,显示图形(方法2)

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…

YOLOv5-Backbone模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P8周:YOLOv5-Backbone模块实现🍖 作者:K同学啊一、前期准备1.设置GPUimport torch from torch impor…

Node=>Express中间件分类 学习4

1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use()或app.get()或app.post()绑定到app实力上的中间件,叫做应用级别的中间件 …

泼辣修图2023最新版本人像美白滤镜手机电脑修图工具

今天,小编分享的是泼辣修图2023最新版本,喜欢追新的朋友赶紧下载使用吧。新版本在图标设计和使用上都有了一些改变,简洁的操作是其一贯的风格。这是一款功能强大的手机及电脑修图app。具体包括了几十种滤镜、曲线调整、颜色调整、皮肤美白、脸…

Biotin-PEG-FITC 生物素聚乙二醇荧光素;FITC-PEG-Biotin 科研用生物试剂

结构式: ​Biotin-PEG-FITC 生物素聚乙二醇荧光素 英文名称:Biotin-PEG-Fluorescein 中文名称:生物素聚乙二醇荧光素 外观:黄色液体、半固体或固体,取决于分子量。 溶剂:溶于大部分有机溶剂,…

学弟学妹少走弯路,超完整算法刷题路线出炉

大家好,我是帅地。 本篇文章主要讲解下面三个事: 1、自己学习算法的一些经历 2、大家学习算法存在的一些普遍问题 3、给大家规划的算法刷题路线 一、算法学习往事 记得当初学了 C 语言就开始刷题了,刷题倒不是面试,而是为了…

图扑数字孪生智慧社区,助力社区数字化转型

前言 智慧社区是社区管理的一种新理念,是新形势下社会管理创新的一种新模式。智慧社区是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,为社区居民提供一个安全、舒适、便利的现代化、智慧化生活环境,从而形成基于信息化…

[Linux]-Ansible

[Linux]-Ansible 森格 | 2023年2月 介绍:本文旨在介绍ansible的基本使用,提高部署环境时的效率,避免重复操作带来的时间成本。 文章目录[Linux]-Ansible一、什么是Ansible1.1 基本介绍1.2 核心概念1.3 优点二、环境部署2.1 Ansible2.2 Docke…