在PyTorch中,forward()和普通方法有什么区别?

4
实现自定义 nn.Module 类的 forward() 方法与添加普通方法到该类有何不同?
听说 forward() 方法只应该接受和返回张量,因为 PyTorch 对 forward() 方法的输入和输出进行了特殊处理。但是,我尝试在 forward() 方法中输入/输出非张量对象,并实现一个没有 forward() 方法的模块(相反,有多个自定义命名的方法充当 forward() 方法),这两种方式都能很好地工作。

1
你是否知道当你通过 .__call__() 调用一个 nn.Module 作为函数时,会调用 .forward(..) 方法? - flawr
1
例如,如果您将模型包装在“DataParallel”中,则如果您不实现“forward”,则肯定会遇到问题。 - jodag
1个回答

7
forward()方法不接受任何类型的参数。然而,forward()方法的目标是封装前向计算步骤。在__call__函数中调用forward()。在forward()方法中,PyTorch调用嵌套模型本身执行前向传递。
建议:
不要调用forward(x)方法。应该调用整个模型本身,如model(x),以执行前向传递并输出预测结果。
如果不这样做会发生什么?
如果调用.forward()方法,并且您的模型中有hooks,则这些hooks将没有任何效果。

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