I want to subclass Sequential
to create a Residual sequential class in a few lines.
class Residual(nn.Sequential):
def forward(self, x):
return x + super().__call__(x)
However, this crashes with:
RecursionError: maximum recursion depth exceeded while calling a Python object
If I understand well, the super().__call__
actually calls nn.Module.__call__
which then calls the forward
of self
… which is the one I overrode, that calls the __call__
again …
Changing the __call__
to forward
solves the problem :
class Residual(nn.Sequential):
def forward(self, x):
return x + super().forward(x)
But I will lose the hooks then, is that right ?
Is my global understanding correct ?
Could it poses any problem to modules such as DataParallel
that the forward
of Sequential
is callled directly ?
Thank you much in advance !