pytorch 調用forward 的具體流程


forward方法的具體流程:

以一個Module為例:
1. 調用module的call方法
2. module的call里面調用module的forward方法
3. forward里面如果碰到Module的子類,回到第1步,如果碰到的是Function的子類,繼續往下
4. 調用Function的call方法
5. Function的call方法調用了Function的forward方法。
6. Function的forward返回值
7. module的forward返回值
8. 在module的call進行forward_hook操作,然后返回值。


上述中“調用module的call方法”是指nn.Module 的__call__方法。定義__call__方法的類可以當作函數調用,具體參考Python的面向對象編程。

也就是說,當把定義的網絡模型model當作函數調用的時候就自動調用定義的網絡模型的forward方法。nn.Module 的__call__方法部分源碼如下所示:

    def __call__(self, *input, **kwargs):
       result = self.forward(*input, **kwargs)
       for hook in self._forward_hooks.values():
           #將注冊的hook拿出來用
           hook_result = hook(self, input, result)
       ...
       return result 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM