-
tensor.grad和tensor.grad.data区别是什么?手动进行梯度更新时,如果直接用
tensor.grad进行运算则会被加入计算图,导致内存占用不停加大以及累计梯度出错,用tensor.grad.data则不会。或者可以在with torch.no_grad():下直接用tensor.grad进行,这样就不会被加入计算图或者梯度累加__注意:__不管哪种方法,每次更新完都记得对梯度清空!!!
-
Pytorch教程中有一段关于自定义autograd函数的代码
class LegendrePolynomial3(torch.autograd.Function): """ implement custom autograd Functions by subclassing torch.autograd.Function and implementing the forward and backward passes which operate on Tensors. """ @staticmethod def forward(ctx, input): ctx.save_for_backward(input) return 0.5 * (5 * input ** 3 - 3 * input) @staticmethod def backward(ctx, grad_output): input, = ctx.saved_tensors return grad_output * 1.5 * (5 * input ** 2 - 1)调用方法为
P3 = LegendrePolynomial3.apply y_pred = a + b * P3(c + d * x)在定义
LegendrePolynomial3的forward()函数中有一句ctx.save_for_backward(input)将input存储,而在对应的backward()中则用input, = ctx.saved_tensors将input取出,ctx的相关save操作可以理解为类似CS231n作业中forward()和backward()函数中的cache变量的作用,用于当前计算步骤的梯度计算
Pytorch学习笔记-Autograd自动求导与梯度操作
最新推荐文章于 2025-07-11 17:13:24 发布
本文解析了PyTorch中tensor.grad和tensor.grad.data的区别,强调了在自定义autograd函数中ctx.save_for_backward的作用,并介绍了如何正确管理梯度计算以避免内存问题。还提到了在with torch.no_grad()的上下文中使用grad进行操作的技巧。

1438

被折叠的 条评论
为什么被折叠?



