PyTorch深度学习实践05用pytorch实现线性回归 call 和forward函数
__call __
先上结论:
model(x_data)到底是怎么调用的:
相当于model(x_data)实际上调用的是__call__(x_data),这里的call函数是LinearModel继承自torch.nn.Module的call。也就是Module这个基类的call函数。然后__call__(input)调用(Module的)forward函数。但是我们需要的forward函数和基类里的forward函数不同,所以我们重新写了个forward函数。最后__call__调用的就是我们自己写的forward函数。
可看可不看:
call函数的作用就是让对象可以调用,比如model里可以写(x)可以直接调用model。因为model是LinearModel的实例化对象,而LinearModel是继承了nn.Module的,原来的对象是callable的,我只需要重写forward就行 。之前pytorch里的module的__call__里就有写forward,这样在原来的pytorch里的module里forward就是可调用的。现在做的只是把torch.nn.Module里的forward重新写了一遍而已,为了覆盖。貌似叫函数重载。那么为撒谎forward在定义模型的时候必须重写?因为不同模型在其计算过程基本是不同的。
参考链接:https://blog.csdn.net/dss_dssssd/article/details/82977170(值得看)