在使用深度学习库PyTorch时,我遇到了这样的定义.是否ctx
有相同的行为self
?
class LinearFunction(Function):
@staticmethod
def forward(ctx, input, weight, bias=None):
ctx.save_for_backward(input, weight, bias)
output = input.mm(weight.t())
if bias is not None:
output += bias.unsqueeze(0).expand_as(output)
return output
@staticmethod
def backward(ctx, grad_output):
input, weight, bias = ctx.saved_variables
grad_input = grad_weight = grad_bias = None
if ctx.needs_input_grad[0]:
grad_input = grad_output.mm(weight)
if ctx.needs_input_grad[1]:
grad_weight = grad_output.t().mm(input)
if bias is not None and ctx.needs_input_grad[2]:
grad_bias = grad_output.sum(0).squeeze(0)
return grad_input, grad_weight, grad_bias
Run Code Online (Sandbox Code Playgroud)
直接@staticmethod
使用类类型调用静态方法(),而不是此类的实例:
LinearFunction.backward(x, y)
Run Code Online (Sandbox Code Playgroud)
由于您没有实例,因此self
在静态方法中使用是没有意义的.
在这里,ctx
只是在调用方法时必须传递的常规参数.
归档时间: |
|
查看次数: |
3782 次 |
最近记录: |