【问题标题】:In PyTorch, what is the difference between forward() and an ordinary method?在 PyTorch 中,forward() 和普通方法有什么区别?
【发布时间】:2019-10-23 04:33:22
【问题描述】:

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

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

【问题讨论】:

  • 您知道.forward(..) 在您将nn.Module 作为函数调用时会被调用(通过.__call__())吗?
  • 例如,如果您将模型包装在DataParallel 中,如果您不实现forward,那么您肯定会遇到问题。

标签: pytorch


【解决方案1】:

forward() 方法接受任何类型的参数。然而,forward() 方法的目标是封装前向计算步骤。 forward()__call__ 函数中被调用。在forward() 方法中,PyTorch 调用嵌套模型本身来执行前向传递。

鼓励:

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

如果你不这样做会怎样?

如果你调用.forward() 方法,并且在你的模型中有hooks,钩子不会有任何效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2020-09-22
    • 1970-01-01
    • 2010-12-26
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多