Python 试着去理解什么;将“U”保存为“U向后”;在皮托克
我对Pytorch有一些了解,但我并不真正理解Pytorch中类的机制。 例如,在链接中: 您可以找到以下代码:Python 试着去理解什么;将“U”保存为“U向后”;在皮托克,python,class,pytorch,Python,Class,Pytorch,我对Pytorch有一些了解,但我并不真正理解Pytorch中类的机制。 例如,在链接中: 您可以找到以下代码: import torch class MyReLU(torch.autograd.Function): @staticmethod def forward(ctx, input): ctx.save_for_backward(input) return input.clamp(min=0) @staticmethod
import torch
class MyReLU(torch.autograd.Function):
@staticmethod
def forward(ctx, input):
ctx.save_for_backward(input)
return input.clamp(min=0)
@staticmethod
def backward(ctx, grad_output):
input, = ctx.saved_tensors
grad_input = grad_output.clone()
grad_input[input < 0] = 0
return grad_input
是的。当我在一个具体示例上尝试forward方法时,前一行代码是否存在是无关紧要的:
a=torch.eye(3)
rel=MyReLU()
print(rel.forward(rel,a))
因为我在两种情况下都得到了相同的结果。有人能解释一下发生了什么以及为什么向后添加save\u for\u很有用吗?
提前感谢。ctx.save\u for\u backward方法用于存储在
forward()
过程中生成的值,这些值将在以后执行backward()
时需要。保存的值可以在backward()
期间从ctx.saved\u tensors
属性访问。非常感谢您的回答。但是,我还有一个问题:方法save\u for\u backwardward和saved\u tensors是如何链接在一起的?我在Pytorch网站上找不到任何定义这些方法的代码。
a=torch.eye(3)
rel=MyReLU()
print(rel.forward(rel,a))