pytorch中backward的几个要点

本文深入探讨PyTorch中backward机制的两大关键点:requires_grad属性与标量求导必要性。通过实例演示如何定义网络层并利用backward进行反向传播,强调requires_grad用于跟踪变量变化,而只有标量(loss)才能触发反向传播。

pytorch中backward的2个要点

1. requires_grad

用pytorch定义一个网络层,如果数据中加入requires_grad=True,那么对于这个变量而言,就有了属于自己的导数(grad),如果这个数据是矩阵,那么他的grad是同样大小的一个矩阵。我们将requires_grad视为该变量的一个属性,我们知道,我们在现实生活中,或者说在神经网络中,大部分的函数都是一阶连续可微的,也就是说,他的梯度具有唯一性。requires_grad的存在非常合理。

2. scale才能有backward

scale是标量的意思。
首先我们可用用如下语句查看等式中某个自变量的梯度。

print(x.grad, y.grad)

但是有个前提,我们必须要先对他的结果使用.backward()才能去查看,不然的话,他的梯度会显示为none。
非常需要注意的一点是,能够使用.backward()的必须是标量(scale),不然程序会报错。
结合实际的情况,我们看任何一个网络,使用backward的地方几乎只有一个,那就是loss.backward()。
首先loss肯定是一个标量,无论是MSE还是交叉熵,也无论是否加上了正则项,那都是求和之后的结果,也就是一个数值。这一点非常重要。

以下是我随意写的一个网络层,可以感受一下

import torch
import torch.nn as nn
class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值