pytorch 调用forward 的具体流程
forward方法的具體流程:
以一個(gè)Module為例:
1. 調(diào)用module的call方法
2. module的call里面調(diào)用module的forward方法
3. forward里面如果碰到Module的子類,回到第1步,如果碰到的是Function的子類,繼續(xù)往下
4. 調(diào)用Function的call方法
5. Function的call方法調(diào)用了Function的forward方法。
6. Function的forward返回值
7. module的forward返回值
8. 在module的call進(jìn)行forward_hook操作,然后返回值。
上述中“調(diào)用module的call方法”是指nn.Module 的__call__方法。定義__call__方法的類可以當(dāng)作函數(shù)調(diào)用,具體參考Python的面向?qū)ο缶幊獭?/p>
也就是說,當(dāng)把定義的網(wǎng)絡(luò)模型model當(dāng)作函數(shù)調(diào)用的時(shí)候就自動(dòng)調(diào)用定義的網(wǎng)絡(luò)模型的forward方法。nn.Module 的__call__方法部分源碼如下所示:
??? def __call__(self, *input, **kwargs):
?????? result = self.forward(*input, **kwargs)
?????? for hook in self._forward_hooks.values():
?????????? #將注冊(cè)的hook拿出來用
?????????? hook_result = hook(self, input, result)
?????? ...
?????? return result?
總結(jié)
以上是生活随笔為你收集整理的pytorch 调用forward 的具体流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch中多GPU训练指北
- 下一篇: PyTorch之前向传播函数自动调用fo