【Pytorch学习】用pytorch搭建第一个神经网络
簡述
雖然使用過pytorch來搭建GANs,但是對于Pytorch其實還是不是很熟,這里想系統的學習下。順便再來做一下筆記。
學習網站
https://morvanzhou.github.io/tutorials/machine-learning/torch/3-01-regression/
大家直接看原文好了。這里我自己隨便寫寫便于我自己記憶。
擬合過程
數據
- torch.unsqueeze(),會擴展這個維度。然后dim選擇的方向是列的方向。這里,就是將[1,2,3]變成了[[1], [2], [3]] 類似于這樣的操作。
- torch.rand() 隨機數,范圍為(0,1)然后,輸入的內容為tuple表示規模
- 因為有結構的問題,所以,這里就直接使用了.data先獲取數據之后,再用numpy()來轉成numpy中的數據類型。
- 畫圖的話是基礎,這里就不講了。
建立神經網絡
這里會寫一個類。就是神經網絡類。
- 基類為torch.nn.Module
在pytorch的官方文檔中寫道
Base class for all neural network modules.
所有神經網絡的基類
Your models should also subclass this class.
你的模型也需要是這個類的子類
Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes:
Modules可以包括其他的模塊,允許按照樹形結構建造它。你也可以創立一個子模塊,通過下面的方式。(其實文檔下寫的標準方法,跟下面的是一樣的)
- 通過super函數實現父類的初始化
- 創建類變量,一個隱藏層的模型,一個輸出層模型
- 丟進去的兩個參數,其實就都是數。表示的是輸入這個小模塊的長度,再到輸出這個小模塊的長度。其實就說這個模型就是隱含著一個矩陣,做了一個矩陣乘法之后,就可以得到后面的東西了。
- 重載了前向傳播的函數內容。
- 表示,前向傳播的過程中,先經過隱藏層模型,再被relu的激活模型調用,之后,在通過輸出層。這就是整個前向傳播的流程了
之后,我們就需要自己申明這樣的一個對象了。
net = Net(n_feature=1, n_hidden=10, n_output=1)意思就是輸入層的節點數為1,隱藏層的節點為10,輸出層的節點為1
因為輸入層為x,而我們這里考慮的只是一個簡單的函數擬合問題,當然,這里就只有一個節點啦。這里,我們想起來,為什么之前需要有unsqueeze()操作了。
訓練神經網絡
操作其實非常粗糙
構建一個優化器和損失函數
- 下面選擇的優化方法是SGD(隨機梯度下降),然后,學習率為0.2
- MSELoss 其實就是∑(xi,yi)(xi?yi)2\sum_{(xi, yi)}(x_i- y_i) ^2∑(xi,yi)?(xi??yi?)2。當然啦,有一個系數什么的。那個在確定了輸入的集合的規模情況下,這個就是無關緊要的啦。
訓練這個模型
for t in range(100):prediction = net(x) # 喂給 net 訓練數據 x, 輸出預測值loss = loss_func(prediction, y) # 計算兩者的誤差optimizer.zero_grad() # 清空上一步的殘余更新參數值loss.backward() # 誤差反向傳播, 計算參數更新值optimizer.step() # 將參數更新值施加到 net 的 parameters 上到這里,其實整個模型就擬合完了。
完整代碼(加上畫圖,生成gif)
- 下面的包都是除了標準庫自帶的話,其他都是可以直接pip install的
總結
以上是生活随笔為你收集整理的【Pytorch学习】用pytorch搭建第一个神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【GANs入门】pytorch-GANs
- 下一篇: pytorch下载mnist超时解决方案