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

在PyTorch中,forward()和普通方法有什么区别?,pytorch,Pytorch,实现自定义nn.Module类的forward()方法与向该类添加普通方法有何不同 我听说forward()方法应该只接受和返回张量,因为PyTorch对forward()方法的输入和输出实现了特殊处理。但我尝试在forward()方法上输入/输出非张量对象,并实现一个没有forward()方法的模块(相反,有多个自定义命名方法,它们的行为类似于forward()方法)。这两种方法都很有效。forward()方法不接受任何类型的参数。但是,forward()方法的目标是封装正向计算步骤forwa

实现自定义
nn.Module
类的
forward()
方法与向该类添加普通方法有何不同

我听说
forward()
方法应该只接受和返回张量,因为PyTorch对
forward()
方法的输入和输出实现了特殊处理。但我尝试在
forward()
方法上输入/输出非张量对象,并实现一个没有
forward()
方法的模块(相反,有多个自定义命名方法,它们的行为类似于
forward()
方法)。这两种方法都很有效。

forward()
方法不接受任何类型的参数。但是,
forward()
方法的目标是封装正向计算步骤
forward()
\uuu call\uu
函数中调用。在
forward()
方法中,PyTorch调用嵌套模型本身来执行正向传递

鼓励它:

不调用forward(x)方法。您应该调用整个模型本身,如在模型(x)中执行正向传递和输出预测

如果你不这样做会发生什么


如果调用
.forward()
方法,并且在模型中具有,钩子将不会产生任何效果。

您是否知道,当您将
nn.Module
作为函数调用时(例如,通过
调用
)会调用
.forward(…)
,如果将模型包装在
DataParallel
中,如果不实现
forward
,肯定会遇到问题。