深度學習-03-函數的連續調用
????????本文是《深度學習入門2-自製框架》 的學習筆記,記錄自己學習心得,以及對重點知識的理解。如果內容對你有幫助,請支持正版,去購買正版書籍,支持正版書籍不僅是尊重作者的辛勤勞動,也是鼓勵更多優秀作品問世。
????????當前筆記內容主要為:步驟2 函數的連續調用 章節的相關理解。
????????書籍總共分為5個階段,每個階段分很多步驟,最終是一步一步實現一個深度學習框架。例如前兩個階段為:
第 1 階段共包括 10 個步驟 。 在這個階段,將創建自動微分的機制
第 2 階段,從步驟11-24,該階段的主要目標是擴展當前的 DeZero ,使它能夠執行更復雜的計算 ,使它能 夠處理接收多個輸入的函數和返回多個輸出的函數
1.Exp函數的實現
上面一節實現了初級版,和高階版本的函數Function 的實現,這個版本我們繼續實現一個新的函數,以及將多個函數連接起來進行計算。
首先實現一個新的函數 ?y = exp(x)?代碼如下:
import numpy as np
from step01 import *
from step02 import *class Exp(Function):def forward(self,x):return np.exp(x)
有了前面幾節的學習,定義這個函數應該不太難。?
2.函數的連續調用
怎么讓函數能夠連續調用?我們回到我們的Function 類的定義,我們發現
import numpy as np
from step01 import *class Function:def __call__(self, input):x = input.datay = self.forward(x)output = Variable(y)return outputdef forward(self, x):raise NotImplementedError() ?#使用Function ?這個方法forward 方法的人 , 這個方法應該通過繼承采實現
我們的Function 在執行call 方法后,返回的都是我們的箱子變量 Variable 所以我們可以很容易的在多個函數將上一個
輸出作為下一個函數的輸入。這樣就串起來了。
例如我們可以定義函數 y = (exp(x^2))^2 實現如下:
? ? A = Square()B = Exp()C = Square()x = Variable(np.array(0.5))a = A(x)b = B(a)y = C(b)
輸出結果為:
1.648721270700128
3.項目代碼
'''
step03.py
函數的連續調用'''import numpy as np
from step01 import *
from step02_1 import *class Exp(Function):def forward(self,x):return np.exp(x)if __name__ == '__main__':A = Square()B = Exp()C = Square()x = Variable(np.array(0.5))a = A(x)b = B(a)y = C(b)print(y.data)'''
輸出結果:
C:\Users\Administrator\AppData\Local\Programs\Python\Python39-32\python.exe D:/pyworkspace/dezero-01/step03.py
1.648721270700128'''
4.總結
本節實現了函數的連續調用,能實現連續調用,得益于我們定義的Function 類輸入輸出參數都是Variable 箱子變量類型。
通過簡單函數組合可以構成復合函數,有了復合函數,我們就可以執行復雜的計算。本節例子程序所描繪的多個函數的計算圖如下所示。