pytorch中非标量调用backward()的时候为什么要先进行sum操作

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。

在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。
一、导数
先说明一下向量的导数,假设y=f(x):
1、如果x是标量,y为标量,那么y对x的导数为标量。
2、如果x是标量,y为一维列向量,那么y对x的导数为1维列向量。此时可以转为两个标量函数分别求导,然后拼接。
image.png
3、如果x是1维行向量,y为标量,那么y对x的导数是1维行向量。
image.png
4、如果x是1维行向量,y为1维列向量,那么y对x的导数是2维矩阵。
image.png
二、backward()函数调用
2.1、当y为标量时
y=f(x),当y为标量时,可以直接调用y.backward()
1、假设x是标量,y为标量
image.png
2、假设x是1维行向量,y为标量
image.png
2.2、当y为向量时
当y为向量时,调用backward需要传入一个gradient参数。
image.png
image.png
所以y.sum().backward()等价于y.backward(torch.ones(len(x)))
image.png

小结。其实在深度学习中,损失函数都是标量,所以一般情况下我们可以直接调用backward()就可以了。

参考资料
1、《动手学深度学习》第二版,https://zh.d2l.ai/index.html

目录
相关文章
|
4月前
|
机器学习/深度学习 存储 PyTorch
Pytorch中in-place操作相关错误解析及detach()方法说明
Pytorch中in-place操作相关错误解析及detach()方法说明
263 0
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
9大PyTorch最重要的操作 !!
9大PyTorch最重要的操作 !!
52 0
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch应用实战一:实现卷积操作
PyTorch应用实战一:实现卷积操作
130 0
|
12月前
|
机器学习/深度学习 自然语言处理 PyTorch
【NLP】深入了解PyTorch:功能与基本元素操作
【NLP】深入了解PyTorch:功能与基本元素操作
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
PyTorch基础之张量模块数据类型、基本操作、与Numpy数组的操作详解(附源码 简单全面)
60 0
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
274 0
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
|
3月前
|
存储 机器学习/深度学习 PyTorch
Pytorch-张量形状操作
PyTorch中,张量形状操作至关重要,如reshape用于改变维度而不变元素,transpose/permute用于维度交换,view改形状需内存连续,squeeze移除单维度,unsqueeze添加维度。这些函数帮助数据适应神经网络层间的转换。例如,reshape能调整数据适配层的输入,transpose用于矩阵转置或多维排列,而squeeze和unsqueeze则用于处理单维度。理解并熟练运用这些工具是深度学习中必要的技能。
|
PyTorch 算法框架/工具
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
1901 0
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
|
4月前
|
机器学习/深度学习 PyTorch 调度
50个超强的Pytorch操作 ! ! !
50个超强的Pytorch操作 ! ! !
119 1
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch的10个基本张量操作
PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法,并且框架也是高效和可扩展的,下面我们将介绍一些Pytorch的基本张量操作。
95 1