今天小编给大家分享一下Pytorch中的forward有哪些功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
forward有什么特殊功能?
第一条:.forward()可以不写
我最开始发现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)) --------------------------运行结果------------------------- D:UsersLenovoanaconda3python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 Process finished with exit code 0
可以发现,T(6)是可以输出的!而且
不用指定,默认了调用forward方法。当然如果非要写上.forward()这也是可以正常运行的,和不写是一样的。
如果不调用Pytorch(正常的Python语法规则),这样肯定会报错的
# import torch.nn as nn #不再调用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)) --------------------------运行结果------------------------- D:UsersLenovoanaconda3python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 ************************ Traceback (most recent call last): File "C:UsersLenovoDesktopDLpythonProject t.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不能被直接调用,不知道你想调用哪个方法。
第二条:优先运行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()) --------------------------运行结果------------------------- D:UsersLenovoanaconda3python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py 48 80 Process finished with exit code 0
可以见到,在class中有多个method的时候,如果不指定method,forward是会被优先执行的。