pytorch自定义layer有两种方式:
方式一:通过继承torch.nn.Module类来实现拓展。只需重新实现__init__和forward函数。
方式二:通过继承torch.autograd.Function,除了要实现__init__和forward函数,还要实现backward函数(就是自定义求导规则)。
方式一看着更简单一点,torch.nn.Module不香么?为毛要用方式二。因为当我们自定义的函数torch.nn.functioanl里没有的时候,或者一些操作不可导,就需要自己定义求导方式,也就是所谓的Extending torch.autograd
官方的示例是这个样子的: Class torch.autograd.Function
>>> class Exp(Function):
>>>
>>> @staticmethod
>>> def forward(ctx, i):
>>> result = i.exp()
>>> ctx.save_for_backward(result)
>>> return result
>>>
>>> @staticmethod
>>> def backward(ctx, grad_output):
>>> result, = ctx.saved_tensors
>>> return grad_output * result
详细学习参见这个博客讲的很好https://blog.youkuaiyun.com/qq_27825451/article/details/95189376