Я заметил, что в документации Pytorch Lightning упоминалось, что вы можете вызвать метод пересылки из другого метода в том же классе, просто вызвав self(x)
. Я не смог найти никакой информации о том, как это работает. Я всегда думал, что вы будете вызывать метод, используя self.forward
Очевидно, он вызывает метод forward, но как? Есть ли какая-нибудь документация по Python о том, что происходит?
Я нашел это по следующему URL: https://pytorch-lightning.readthedocs.io/en/stable/new-project.html
Конкретный фрагмент кода таков:
def training_step(self, batch, batch_idx):
...
z = self(x)
Вы должны понимать, что f(*args, **kwargs)
это то же самое, что и f.__call__(*args, **kwargs)
:)
Вообще говоря, в Python при «вызове» объекта вы вызываете его метод __call__
. То есть,
self(x)
эквивалентно
self.__call__(x)
Для pytorch nn.Module
(и всех производных классов) __call__
оборачивает функцию forward
модуля, поэтому, с вашей точки зрения, self(x)
в основном пересылает x
через модуль self
.
Это просто вызов метода
__call__
объекта