小白学Pytorch系列-- torch.autograd API
小白学Pytorch系列-- torch.autograd API

torch.Autograd提供了实现任意标量值函数的自动微分的类和函数。它只需要对现有代码进行最小的更改-你只需要声明张量s,它的梯度应该用requires grad=True关键字计算。到目前为止,我们只支持浮点张量类型(half, float, double和bfloat 16)和复杂张量类型(cfloat, cdouble)的autograd。
基本概念
Variable,Parameter和torch.tensor()
torch.nn.Parameter(是Variable的子类)
如果在网络的训练过程中需要更新,就要定义为Parameter, 类似为W(权重)和b(偏置)也都是Parameter
Variable默认是不需要求梯度的,还需要手动设置参数 requires_grad=True。Variable因为要多次反向传播,那么在backward的时候还要手动注明参数(),就非常麻烦。
Pytorch主要通过引入nn.Parameter类型的变量和optimizer机制来解决了这个问题。Parameter是Variable的子类,本质上和后者一样,只不过parameter默认是求梯度的,同时一个网络中的parameter变量是可以通过 net.parameters() 来很方便地访问到的,只需将网络中所有需要训练更新的参数定义为Parameter类型,再用以optimizer,就能够完成所有参数的更新了,例如:optimizer = torch.optim.SGD(net.parameters(), lr=1e-1)
相同点
:torch.tensor()、torch.autograd.Variable和torch.nn.Parameter基本一样。
前两者都可以设置requires_grad参数,后者则直接默认requires_grad=True。
三者都拥有.data,.grad,.grad_fn等属性。
所以,只要requires_grad=True,都可以计算梯度以及backward()。
不同之处:
torch.nn.Parameter,直接默认requires_grad=True,在参数量大时更加方便。
反向传播
参考: https://blog.csdn.net/lj2048/article/details/113527400
实现autograd依赖于Variable和Function这两种数据类型。Variable是Tensor的外包装,Varibale和Tensor基本一致,区别在于多了下面几个属性。

variable类型变量的data属性存储着Tensor数据,grad属性存储关于该变量的导数,creator是代表该变量的创造者。
Variable和Function它们是彼此不分开的,如下图所示,是数据向前传输和向后传输生成导数的过程。

如图,假设我们有一个输入变量input(数据类型为Variable),input是用户输入的,所以其创造者creator为null值,input经过第一个数据操作operation1(比如加减乘除运算)得到output1变量(数据类型仍为Variable),这个过程中会自动生成一个function1的变量(数据类型为Function的一个实例),而output1的创造者就是这个function1。随后,output1再经过一个数据操作生成output2,这个过程也会生成另外一个实例function2,output2的创造者creator为function2。
示例可以参考该Blog: 参考PyTorch教程之Autograd
目标张量一般都是标量,如我们经常使用的损失值Loss,一般都是一个标量。但也有非标量的情况,后面将介绍的Deep Dream的目标值就是一个含多个元素的张量。那如何对非标量进行反向传播呢?
PyTorch有个简单的规定,不让张量(Tensor)对张量求导,只允许标量对张量求导,
因此,如果目标张量对一个非标量调用backward(),则需要传入一个gradient参数,该参数也是张量,而且需要与调用backward()的张量形状相同。

参考
https://zhuanlan.zhihu.com/p/321449610
相关文章:
小白学Pytorch系列-- torch.autograd API
小白学Pytorch系列-- torch.autograd API torch.Autograd提供了实现任意标量值函数的自动微分的类和函数。它只需要对现有代码进行最小的更改-你只需要声明张量s,它的梯度应该用requires gradTrue关键字计算。到目前为止,我们只支持浮点张量类型(half, f…...
【大数据基础】基于零售交易数据的Spark数据处理与分析
环境搭建 sudo apt-get install python3-pip pip3 install bottle数据预处理 首先,将数据集E_Commerce_Data.csv上传至hdfs上,命令如下: ./bin/hdfs dfs -put /home/hadoop/E_Commerce_Data.csv /user/hadoop接着,使用如下命令…...
【机器学习】P14 Tensorflow 使用指南 Dense Sequential Tensorflow 实现
Tensorflow 第一节:使用指南Tensorflow 安装神经网络一些基本概念隐藏层和输出层:神经元的输出公式Tensorflow 全连接层 Dense 与 顺序模型 SequentialDense LayerSequential Model代码实现一个神经网络实现方式一:手写神经网络* 实现方式二&…...
ubuntu18.04安装nvidia驱动,3种方式图文详解+卸载教程
教程目录一、关闭secure boot二、禁用nouveau驱动2.1 创建配置文件2.2 添加内容2.3 重启电脑2.4 输入命令验证三、安装显卡驱动3.1 软件和更新(失败)3.2 PPA源安装3.3 官网安装包安装四、卸载显卡驱动笔记本类型Ubuntu系统显卡版本联想拯救者Y7000win10U…...
多线程进阶学习11------CountDownLatch、CyclicBarrier、Semaphore详解
CountDownLatch ①. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞 ②. 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞) ③. 计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行 public static void m…...
华为OD机试用java实现 -【RSA 加密算法】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:RSA 加密算法 题目 RSA 加密…...
技术宅小伙:大龄程序员就业,未来我们将何去何从?
程序员是一个高薪高压的职业,同时也是一个需要不断学习的职业。随着技术的不断更新换代,程序员需要不断地学习新的知识和技能,以适应市场的需求。然而,有些程序员可能会遭遇裁员,失去了稳定的收入来源。有些程序员可能…...
Spring Boot+Vue实现Socket通知推送
目录 Spring Boot端 第一步,引入依赖 第二步,创建WebSocket配置类 第三步,创建WebSocket服务 第四步,创建Controller进行发送测试 Vue端 第一步,创建连接工具类 第二步,建立连接 编辑 第三步&a…...
python---python介绍
python介绍 1.1介绍 1.1.1为什么学习 1.1.2什么是python 优雅简单易学1.1.3在线2进制转换 在线二进制转文本工具 - 转换 1.1.4python的安装和配置 1.需要配置对应的环境变量。可以设置多个。 默认全选 设置安装的路径 最后安装完成即可。 验证:python 如何退出 1.1.…...
第十四届蓝桥杯大赛——真题训练第10天
目录 第一题:扫雷 题目描述 输入描述 输出描述 输入输出样例 运行限制 题目代码 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 题目分析 题目代码 第三题:求阶乘 问题描述…...
3.29~3.30学习总结
刷题情况: 蓝桥杯刷题: Java学习情况: 抽象类:如果将子类中抽取的共性行为(方法),子类的执行不一样的时候 (通俗一点来说,就是无法找到一个万能的方法体供子类使用,但这…...
结构体详解 ——— C语言
目录 1.结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段(位段的填充&可移植性) 位段的内存分配 1.结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对…...
Java SE 基础(4) Java的语言特点
语言特点 Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论&a…...
都炸店了,拼多多还在坚持什么
子超这两天听说了拼多多被“炸店”事件,第一反应是震惊:这都什么年代了,还有这种不择手段的暴力行为?所谓的炸店,就是一些人员被煽动和组织起来,有预谋地对店铺发起打砸行动,这和线下去打砸商铺…...
vue尚品汇商城项目-day01【6.Footer组件的显示与隐藏】
文章目录6.Footer组件的显示与隐藏6.1我们可以根据组件身上的$route获取当前路由的信息,通过路由路径判断Footer显示与隐藏6.2配置路由的时候,可以给路由添加元信息[meta],路由需要配置对象,它的key不能乱接、瞎写、胡写ÿ…...
命令行上的数据科学第二版 一、简介
原文:https://datascienceatthecommandline.com/2e/chapter-1-introduction.html 贡献者:Ting-xin 这本书是关于如何利用命令行做数据科学的。我的目标是通过教你使用命令行的力量,让自己成为一名更高效和多产的数据科学家。 在标题中同时使…...
utf-8转换到utf-16的转换过程你懂吗?
人生自是有情痴,此恨不关风与月。——唐代元稹《离思》 从UTF-8编码的文件中读取文本并将其存储到Java的String对象中,涉及到从字节序列到Unicode码点,再到UTF-16编码的转换。以下是详细的步骤: 从文件读取字节序列:首…...
C++编程大师之路:从入门到精通--持续更新中~
文章目录前言主要内容C基础入门初识C第一个C程序注释变量常量关键字标识符命名规则数据类型整型sizeof关键字实型(浮点型)字符型转义字符字符串型布尔类型 bool数据的输入运算符算术运算符赋值运算符比较运算符逻辑运算符程序流程结构选择结构if语句三目…...
面试阿里软件测试岗,收到offer后我却毫不犹豫拒绝了....
我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是2年。我想说的是,但凡有点机会,千万别去外包! 在深思熟虑过后&am…...
【c语言多线程编程】关于pthread_create()和pthread_join()的多线程详解
关于pthread_create()和pthread_join()的多线程详解 一、首先说一下pthread_create() 函数的用法: int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine) (void *),void *arg);各参数的含义: 1、pthread_t *thre…...
宝可梦随机化终极指南:Universal Pokemon Randomizer ZX 完全使用教程
宝可梦随机化终极指南:Universal Pokemon Randomizer ZX 完全使用教程 【免费下载链接】universal-pokemon-randomizer-zx Public repository of source code for the Universal Pokemon Randomizer ZX 项目地址: https://gitcode.com/gh_mirrors/un/universal-po…...
Tencent Hunyuan3D-1.0学术合作机会:腾讯混元团队的研究方向与合作模式
Tencent Hunyuan3D-1.0学术合作机会:腾讯混元团队的研究方向与合作模式 【免费下载链接】Hunyuan3D-1 腾讯开源的Hunyuan3D-1项目,创新提出两阶段3D生成方法,实现快速、高质量的文本到3D和图像到3D转换,融合Hunyuan-DiT模型&#…...
窗口效率革命:WindowResizer重构数字空间管理新范式
窗口效率革命:WindowResizer重构数字空间管理新范式 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 问题诊断:被忽视的数字空间效率黑洞 现代办公的隐形枷…...
终极解决方案:5分钟完成DOCX到LaTeX的专业转换指南 [特殊字符]
终极解决方案:5分钟完成DOCX到LaTeX的专业转换指南 🚀 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 还在为Word文档转换LaTeX格式而烦恼吗?docx2tex就是你…...
像素幻梦·创意工坊应用场景:独立音乐人专辑封面像素艺术生成流程
像素幻梦创意工坊应用场景:独立音乐人专辑封面像素艺术生成流程 1. 引言:像素艺术在音乐视觉中的价值 在数字音乐时代,专辑封面依然是艺术家表达音乐理念的重要载体。对于独立音乐人而言,独特的视觉风格往往能成为作品的标志性符…...
像素史诗落地企业知识库:用Pixel Epic构建内部行业情报自动摘要系统
像素史诗落地企业知识库:用Pixel Epic构建内部行业情报自动摘要系统 1. 企业知识管理的新挑战 在信息爆炸的时代,企业面临的最大挑战不是获取信息,而是如何从海量数据中提取有价值的知识。传统知识管理系统存在几个关键痛点: 信…...
[Linux][虚拟串口]x一个特殊的字节
目标:构建带上下文记忆的猫咪聊天机器人 先看代码: from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.messages import SystemMessage,HumanMessage,AIMessage import os from dote…...
Calypso vs PC-DMIS:三坐标两大软件脱机编程实战对比与选型指南
Calypso vs PC-DMIS:三坐标测量软件脱机编程深度对比与实战选型策略 在精密制造领域,三坐标测量机(CMM)的脱机编程能力直接决定了检测效率与资源利用率。作为行业两大标杆,蔡司Calypso与海克斯康PC-DMIS在用户界面设计、编程逻辑、仿真验证等…...
【生产环境禁用警告】:这6个Python内存反模式正悄悄拖垮你的K8s Pod——附自动检测脚本
第一章:Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中,内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收(GC)机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...
Qwen3.5-2B入门指南:WebUI中Clear Image按钮对多轮图文对话的影响
Qwen3.5-2B入门指南:WebUI中Clear Image按钮对多轮图文对话的影响 1. 认识Qwen3.5-2B轻量化多模态模型 Qwen3.5-2B是Qwen3.5系列中的轻量级版本,仅有20亿参数规模。这个模型特别适合在资源有限的设备上运行,比如个人电脑、边缘计算设备等。…...
