談談對Pytorch中的forward的理解
寫在前面
以下是本人根據(jù)Pytorch學習過程中總結(jié)出的經(jīng)驗,如果有錯誤,請指正。
正文
為什么都用def forward,而不改個名字?
在Pytorch建立神經(jīng)元網(wǎng)絡模型的時候,經(jīng)常用到forward方法,表示在建立模型后,進行神經(jīng)元網(wǎng)絡的前向傳播。說的直白點,forward就是專門用來計算給定輸入,得到神經(jīng)元網(wǎng)絡輸出的方法。
在代碼實現(xiàn)中,也是用def forward
來寫forward前向傳播的方法,我原來以為這是一種約定熟成的名字,也可以換成任意一個自己喜歡的名字。
但是看的多了之后發(fā)現(xiàn)并非如此:Pytorch對于forward方法賦予了一些特殊“功能”
(這里不禁再吐槽,一些看起來挺厲害的Pytorch“大神”,居然不知道這個。。。只能草草解釋一下:“就是這樣的。。。”)
forward有什么特殊功能?
第一條:.forward()可以不寫
我最開始發(fā)現(xiàn)forward()的與眾不同之處就是在此,首先舉個例子:
import torch.nn as nn class test(nn.Module): def __init__(self, input): super(test,self).__init__() self.input = input def forward(self,x): return self.input * x T = test(8) print(T(6)) # print(T.forward(6)) --------------------------運行結(jié)果------------------------- D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 Process finished with exit code 0
可以發(fā)現(xiàn),T(6)是可以輸出的!而且不用指定,默認了調(diào)用forward方法
。當然如果非要寫上.forward()這也是可以正常運行的,和不寫是一樣的。
如果不調(diào)用Pytorch(正常的Python語法規(guī)則),這樣肯定會報錯的
# import torch.nn as nn #不再調(diào)用torch class test(): def __init__(self, input): self.input = input def forward(self,x): return self.input * x T = test(8) print(T.forward(6)) print("************************") print(T(6)) --------------------------運行結(jié)果------------------------- D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 ************************ Traceback (most recent call last): File "C:\Users\Lenovo\Desktop\DL\pythonProject\tt.py", line 77, in <module> print(T(6)) TypeError: 'test' object is not callable Process finished with exit code 1
這里會報:‘test’ object is not callable
因為class不能被直接調(diào)用,不知道你想調(diào)用哪個方法。
第二條:優(yōu)先運行forward方法
如果在class中再增加一個方法:
import torch.nn as nn class test(nn.Module): def __init__(self, input): super(test,self).__init__() self.input = input def byten(self): return self.input * 10 def forward(self,x): return self.input * x T = test(8) print(T(6)) print(T.byten()) --------------------------運行結(jié)果------------------------- D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 80 Process finished with exit code 0
可以見到,在class中有多個method的時候,如果不指定method,forward是會被優(yōu)先執(zhí)行的。
總結(jié)
在Pytorch中,forward方法是一個特殊的方法,被專門用來進行前向傳播。
到此這篇關(guān)于談談對Pytorch中的forward的理解的文章就介紹到這了,更多相關(guān)Pytorch中的forward內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux平臺使用Python制作BT種子并獲取BT種子信息的方法
這篇文章主要介紹了linux平臺使用Python制作BT種子并獲取BT種子信息的方法,結(jié)合實例形式詳細分析了Python BT模塊的安裝及針對BT種子文件的相關(guān)操作技巧,需要的朋友可以參考下2017-01-01利用 PyCharm 實現(xiàn)本地代碼和遠端的實時同步功能
這篇文章主要介紹了利用 PyCharm 實現(xiàn)本地代碼和遠端的實時同步功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03python爬蟲今日熱榜數(shù)據(jù)到txt文件的源碼
這篇文章主要介紹了python爬蟲今日熱榜數(shù)據(jù)到txt文件的源碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02Python實現(xiàn)的將文件每一列寫入列表功能示例【測試可用】
這篇文章主要介紹了Python實現(xiàn)的將文件每一列寫入列表功能,涉及Python文件讀取、遍歷、序列追加、賦值等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例
這篇文章主要介紹了Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08