python中'ctx'和'self'之间的区别?

Per*_*via 5 python pytorch

在使用深度学习库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)

Ron*_*eau 6

直接@staticmethod使用类类型调用静态方法(),而不是此类的实例:

LinearFunction.backward(x, y)
Run Code Online (Sandbox Code Playgroud)

由于您没有实例,因此self在静态方法中使用是没有意义的.

在这里,ctx只是在调用方法时必须传递的常规参数.