在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
,肯定会遇到问题。