pytorch系列-----1 python class 中 的__call__方法
阿新 • • 發佈:2018-11-11
鑑於pytorch在科學論文領域用的越來越多,想寫一個系列文章,講述pytorch的用法。
要學習pytorch,一個前提是 知道python calss中的__call__
和__init__
方法.
簡單的說就是:
__init__
: 類的初始化函式,類似於c++的建構函式__call___
: 使得類物件具有類似函式的功能。
__init__
比較好理解,現在主要看一下 __call__
的功能示例:
class A():
def __call__(self):
print('i can be called like a function' )
a = A()
a()
out:
i can be called like a function
讓我們在呼叫時傳入引數如何?
class A():
def __call__(self, param):
print('i can called like a function')
print('摻入引數的型別是:', type(param))
a = A()
a('i')
out:
i can called like a function
摻入引數的型別是: <class ‘str’>
發現物件a的表現完全類似一個函式。
那當然也可以在__call__
裡呼叫其他的函式啊,
在__call__
函式中呼叫forward
函式,並且返回呼叫的結果
class A():
def __call__(self, param):
print('i can called like a function')
print('傳入引數的型別是:{} 值為: {}'.format(type(param), param))
res = self.forward(param)
return res
def forward(self, input_):
print('forward 函式被呼叫了')
print('in forward, 傳入引數型別是:{} 值為: {}'.format( type(input_), input_))
return input_
a = A()
input_param = a('i')
print("物件a傳入的引數是:", input_param)
out:
i can called like a function
傳入引數的型別是:<class ‘str’> 值為: i
forward 函式被呼叫了
in forward, 傳入引數型別是:<class ‘str’> 值為: i
物件a傳入的引數是: i
現在我們將初始化函式__init__
也加上,來看一下:
在物件初始化時確定初始年齡,通過呼叫a(2)
為物件年齡增加2歲,
class A():
def __init__(self, init_age):
super().__init__()
print('我年齡是:',init_age)
self.age = init_age
def __call__(self, added_age):
res = self.forward(added_age)
return res
def forward(self, input_):
print('forward 函式被呼叫了')
return input_ + self.age
print('物件初始化。。。。')
a = A(10)
input_param = a(2)
print("我現在的年齡是:", input_param)
out:
物件初始化。。。。
我年齡是: 10
forward 函式被呼叫了
我現在的年齡是: 12
pytorch主要也是按照__call__
, __init__
,forward
三個函式實現網路層之間的架構的
這部落格講述了pytorch中具體實現:https://blog.csdn.net/dss_dssssd/article/details/82977170