【问题标题】:What does calling self within a class do?在类中调用 self 有什么作用?
【发布时间】:2021-03-31 22:03:50
【问题描述】:

我注意到 Pytorch Lightning 的文档中提到,您可以通过调用 self(x) 从同一类中的另一个方法调用 forward 方法。我无法找到有关其工作原理的任何信息。我一直以为你会用self.forward调用方法

显然,它调用了 forward 方法,但是如何调用呢?有没有关于发生了什么的 python 文档?

我在以下网址找到了这个: https://pytorch-lightning.readthedocs.io/en/stable/new-project.html

具体的代码片段是这样的:

def training_step(self, batch, batch_idx):
    ...
    z = self(x)

【问题讨论】:

  • 只是调用了对象的__call__方法
  • 你应该意识到f(*args, **kwargs)f.__call__(*args, **kwargs) 是一样的:)

标签: python pytorch pytorch-lightning


【解决方案1】:

一般来说,在python中,当“调用”一个对象时,你是在调用它的__call__方法。也就是说,

  self(x)

等价于

  self.__call__(x)

对于 pytorch nn.Module(和所有派生类)__call__ 环绕模块的 forward 函数,因此,从您的角度来看,self(x) 基本上是通过模块 self 转发 x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2014-08-02
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多