先記錄一下一開始學習torch時未曾記錄(也未好好弄懂哈)導致又忘記了的tensor、variable、計算圖
計算圖
計算圖直白的來說,就是數學公式(也叫模型)用圖表示,這個圖即計算圖。借用 https://hzzone.io/cs231n/%E7%90%86%E8%A7%A3-PyTorch-%E8%AE%A1%E7%AE%97%E5%9B%BE%E3%80%81Autograd-%E6%9C%BA%E5%88%B6%E5%92%8C%E5%AE%9E%E7%8E%B0%E7%BA%BF%E6%80%A7%E6%8B%9F%E5%90%88.html 一張圖 ,紅色圈里就是計算圖
Tensor應該是好懂的,就是一張量,百度一下就可以的。torch.tensor和numpy.ndarray可以相互轉換,
Variable本質上和Tensor一樣,Variable是對Tensor的封裝,操作和tensor基本一致,但是既然封裝了,肯定加了東西,加了什么呢?每個Variable被構建時都含三個屬性,1、tensor本身的.data(可取出Variable中tensor數值);2、對應tensor的梯度.grad(反向傳播的梯度);3、grad_fn屬性,如何得到的Variable的操作,如加減乘除。
detach()方法,官網解釋是從當前計算圖中分離的Variable,意思是通過此方法把requires_grad設置為False了,然后返回一個新的Variable,數據存放位置未變。
在博客 https://www.cnblogs.com/JadenFK3326/p/12072272.html 說了torch.mm()(正常矩陣相乘)和torch.mul()(矩陣對應值相乘) 參考博客 https://blog.csdn.net/da_kao_la/article/details/87484403 感謝博主 還有tensor乘法是torch.matmul()、torch.bmm()
補充一下,torch.mm()是矩陣相乘,輸入的tenso維度只能兩維;torch.matmul()可以說是torch.mm()的boradcast版本,可以進行大於2維的tensor乘法。多個矩陣並行計算 官網解釋如下(看不懂英語自己在谷歌瀏覽器上打開官網,自動翻譯):
torch.bmm(),兩個三維張量相乘,分別為(b*n*m)和(b*m*p),其中b代表batch_size,輸出為(b*n*p)
torch.max(input,dim,keepdim=False,out=None):按維度dim返回最大值
torch.max(input,other,out=None):兩個tensor:input和other元素相比較,返回大的那個
下面的多層感知機和激活函數都比較簡單,就說一下其公式了
多層感知機
即含有至少一個隱藏層的由全連接層組成的神經網絡,且每個隱藏層的輸出通過激活函數進行變換。
$ H = \varnothing (XW_{h})+b_{h} $
$ O = HW_{o}+b_{o} $
其中,$ \varnothing$表示激活函數
ReLU函數
$ ReLU(x) = max(x,0) $
Sigmoid函數
$ sigmoid(x) = \frac{1}{1 + exp(-x)} $
tanh函數
$ tanh(x) = \frac{1 - exp(-2x)}{1 + exp(-2x)} $