在PyTorch中调用forward方法和调用模型实例的区别。

14
很多我看的PyTorch教程都会这样做。
定义模型:
class Network(nn.Module):
    def __init__():
        super().__init__()
        self.conv1 = ..
        ... 
    
    def forward(x)
        ...
    ...

一旦网络被实例化(net = Network()),在教程中,人们会写net(input_data)而不是 net.forward(input_data)。我尝试使用net.forward(),它给出了与net()相同的结果。
为什么这是一种普遍做法?这样做的原因是什么?
1个回答

16

请避免调用Module.forward函数。区别在于所有的钩子都是在__call__函数中分发的请参见这里,因此如果您调用.forward并且在您的模型中有钩子,则这些钩子将不起作用。

简而言之,当您调用Module.forward时,PyTorch钩子将不起作用。

详细的答案可以在这篇帖子中找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接