我學習pytorch框架不是從框架開始,從代碼中看不懂的pytorch代碼開始的
可能由於是小白的原因,個人不喜歡一些一下子粘貼老多行代碼的博主或者一些弄了一堆概念,導致我更迷惑還增加了畏懼的情緒(個人感覺哈),我覺得好像好多人都是喜歡給說的明明白白的,難聽點就是嚼碎了喂我們。這樣也行啊(有點惡心哈),但是有些東西即使嚼碎了我們也弄不明白,畢竟有一些知識是很難的(嚼碎后的知識我們都難以理解)
我知道了這些,也在盡力寫博客時寫的容易理解,但是自身實力有限,還做不到寫博客寫的既有條理又容易理解,請諒解,若有什么好的意見或者博客中的錯誤,歡迎指出,畢竟自己也是借助別人的博客和實踐中的代碼,寫的更適於自己的理解
參考博客:https://blog.csdn.net/e01528/article/details/84075090 https://blog.csdn.net/qq_27825451/article/details/90550890
torch.nn.Module:所有網絡的基類(官方文檔),即我們自己定義網絡或層,需要繼承Module。常用的繼承方法是:super(GraphConvolution, self).__init__(),其中GraphConvolution是自己定義的類或者模型或者說layer。其實nn.Module中無模型和層之分,層也當成一個模型來計算。
在GraphConvolution中的構造函數中需要自己定義可學習的參數和可學習的參數層(卷積層、全連接層),參數封裝成parameter類型。因為訓練模型需要的參數類型是parameter
forward(self,x)函數:前向傳播函數,實現模型,即各個層的連接邏輯(哪個層接哪個層)。其輸入可以是一個或多個variable變量,對x的任何操作也是variable變量。不需要寫反向傳播函數,因為torch.nn.Module可以利用autograd自動實現反向傳播。
調用規則:調用layer(input)即可得到input對應的結果。就是輸入函數所需的參數函數會給返回一個結果。規則:layers.__call__(input),在__call__函數中,主要調用的是layer.forward(x),就是layer(x)=layer.forward(x)
torch.mul(a,b)即矩陣a和矩陣b元素對應相乘,又叫Hadamard乘積。torch.mm(a,b):矩陣a乘以矩陣b。x.mm(a):矩陣x和矩陣a乘積。
torch常用函數可參考
https://www.jianshu.com/p/d678c5e44a6b https://www.jianshu.com/p/54708c840ec4
torch.range(start,end,step):返回一個以start開始以end結束,以step為公差的等差數列。輸出時end包含在內。step可以省略,但是必須有start和end。返回的值是float32類型
torch.range(1,5):結果:tensor([1.,2.,3.,4.,5.]) torch.range(1,5,2):結果:tensor([1.,3.,5.])
torch.arange(start,end,step):返回一個以start開始以end結束,以step為公差的等差數列。輸出時不包含end。end、step都可以省略。返回的值是int64類型
torch.arange(5):結果:tensor([1,2,3,4])
torch.squeeze():壓縮張量維度;torch.unsqueeze():擴張張量維度
參考博客,感謝博主 https://blog.csdn.net/flysky_jay/article/details/81607289