首页 > 解决方案 > 在 PyTorch 中调用 forward 方法与调用模型实例

问题描述

我一直在查看的很多 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().

为什么这是一种常见的做法,以及为什么会这样?

标签: pythonclassooppytorch

解决方案


你应该避免调用Module.forward. 不同之处在于所有的钩子都是在__call__函数see this中调度的,所以如果你调用.forward并在你的模型中有钩子,钩子不会有任何效果。

简而言之,当你打电话时Module.forward,pytorch 钩子不会有任何效果

详细答案可以在这篇 文章中找到


推荐阅读