日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PyTorch框架:(2)使用PyTorch框架构建神经网络模型---气温预测

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch框架:(2)使用PyTorch框架构建神经网络模型---气温预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

第一步:數據導入

第二步:將時間轉換成標準格式(比如datatime格式)

第三步: 展示數據:(畫了4個子圖)

?第四步:做獨熱編碼

?第五步:指定輸入與輸出

?第六步:對數據做一個標準化

?第七步:用torch來構建一個神經網絡模型

第八步:預測結果

?第九步:畫圖


第一步:數據導入

第二步:將時間轉換成標準格式(比如datatime格式)

?

第三步: 展示數據:(畫了4個子圖)

?

?

?第四步:做獨熱編碼

Q1:為什么做獨熱編碼?

A1:因為數據中其中有一列比較特殊,其他列都是數值,但是week列是一些字符串,我們首先將字符串轉換成一種數值的形式,比較簡單的方法就是做一個獨熱編碼,在pandas當中可以使用pd.get_dummies()不用把這個特征傳進來,我直接features,因為features是我們傳進來的一個數據他會自動的幫我們做判斷,判斷這個數據中哪一列是字符串,我自動對他做獨熱(one-hot)編碼。

?如上做完one-hot編碼之后,week這一列就沒有了,數據里邊做了一個one-hot encoding,對我們當前需要的列做了一個額外的編碼,并且還再次把他們拼接到我們的數據當中。

PS:這就是數據處理的第一步,先把數據都轉換成數值的形式。

?第五步:指定輸入與輸出

因為x和y都混在一起了,一會建模的時候我得知道我的輸入是什么,我的輸出是什么,所以需要指定好。

?

?PS:上述代碼中從features中剔除掉(.drop)標簽actual,剩下的就是x了。

?第六步:對數據做一個標準化

因為數據中有些數值比較大,有些數值比較小(做完標準化之后結果收斂的速度會更快一些,收斂的損失值相對于來說會更小一點)。所以做一個標準化預處理再用torch進行建模。

這里使用的是sklearn中的預處理模塊,在預處理模塊中有一個標準化的操作:

此時數據是ndarray格式。

?第七步:用torch來構建一個神經網絡模型

構建網絡模型有兩種方法:第一種是比較麻煩的,一步步的去寫;第二種簡單一些。

第一種:基于Pytorch來構建神經網絡模型。

?

?(1)首先將上述的ndarray格式的數據轉換成tensor格式。

(2)權重參數初始化:一般使用隨機的標準的正態分布比較合適。

  • ? ? ? 準備w1和b1:

? ? ? ? ? ? ? ?初始化w1:輸入是[348,14],要把現在的14個輸入特征,轉換成128個隱層特征。w就是[14,128]。

? ? ? ? ? ? ? ?初始化偏置參數b1:對于w1來說來說我得到了128個神經元特征,那b1就是微調,不是對整體做一個微調,而是對每一個特征都做一個微調。PS:偏置參數的個數永遠是跟得到的特征結果個數是一致的。

第一個隱層得到了128個特征,我輸出結果是一個回歸任務,要得到一個實際的值,所以128肯定不行,我得再來個w2;

  • ? ? ? 準備w2和b2:

? ? ?? ? ? ? ?初始化w2[128,1]前邊連的是你中間的特征128個,我要把這128個特征轉化成一個值,回歸任務是一個值,所以說w2的矩陣維度就是128x1;

? ? ? ? ? ? ? 初始化偏置參數b2=1,因為最終結果得到的是一個值,所以b2為1,是對最終的結果進行一個微調。

PS:注意權重參數在接下來迭代過程當中要計算他的梯度,所以在初始化過程中,都帶了參數requires_grad=True,都是需要計算梯度的。

(3)初始化學習率。

(4)把上述初始化的參數由前到后給它串起來。

  • ? ? ? ? ? ? ?計算第一個隱層結果:.mm就是矩陣乘法。
  • ? ? ? ? ? ? ?將結果經過激活函數:.relu激活函數。
  • ? ? ? ? ? ? ?計算最后一層的結果。
  • ? ? ? ? ? ? ?------------------至此前向傳播計算出來了--------------------------
  • ? ? ? ? ? ? ?計算損失。
  • ? ? ? ? ? ? ?基于損失執行反向傳播(計算梯度)、并更新w1、b1和w2、b2;(負的學習率表示我沿著梯度的反方向,把學習率乘過來,把梯度乘過來就完事了)PS:更新完一次梯度時,記得清空,要不然下次會累加在一起的。

?第二種:更簡單的構建網絡模型

?

retain_graph=True表示接下來要不要重復的執行這個cell的代碼,指定為True,重復執行的話他不會報錯。

??指定輸入的樣本數量;

隱層神經元的個數;

輸出的結果;

加上batch_size;(加上batch_size之后,之前訓練的時候是把數據全部讀入進去,相當于批量梯度下降,這里我們不做批量梯度下降,使用mini_batch,指定一個batch)

構建網絡模型;(之前構建模型是一步步寫的wx+b,這樣比較麻煩)

? ? ? ? ? 第一步:先把序列寫好?;按照torch.nn模塊下序列去寫。

? ? ? ? ? ? ? ? ? ? ? ?第一層指定好它的輸入與輸出(hidden_size得到多少個隱層的神經元),中間加上激活函數;

? ? ? ? ? ? ? ? ? ? ? ?第二層再連一個全連接層nn.Linear(hidden_size,output_size)。第一個參數表示寫好前邊連什么,第二個參數表示得到什么結果。

?所以這樣直接使用touch.nn模塊下的序列結構,可以把這個網絡直接的定義出來(這里按照兩層全連接的模塊去寫,后續可以加卷積加池化等都可以torch.nn模塊下你能想到的層別人都給你寫好了,直接調用就行)。

? ? ? ? ? 第二步:損失函數直接調用現成的包。

? ? ? ? ? 第三步:把優化器拿進來。(之前是做一個梯度下降,每一次自己計算梯度,自己更新,自己再置0,這樣比較麻煩;簡單方法使用torch當中的優化器,優化器里邊有挺多的,這里使用SGD梯度下降也行用Adm也行,Adm用的更多一些,他可以動態的去調整學習率,學習率一開始可能會比較大,他會加入一個衰減函數,讓學習率隨著迭代進行慢慢變小,所以這個應該是更合理一些的)

? ? ? ? ?第四步:指定玩優化器之后開始訓練網絡。(訓練網絡的方法其實和之前是一樣的,寫一個循環,這里多做了一步,這里不是取全部的數據了,而是取其中部分的數據,在這里torch.tensor當中在構造它的輸入數據的時候,這里傳進來兩個索引,一個是start索引,一個是end索引,表示我從原始數據當中一步步的每一次取16個數據,因為設置了batch=16,所以每次會取16個這樣的x和y;接下來預測一個結果prediction,就是走一個前向傳播,my_nn(xx)里邊的xx就是我輸入的一個batch的數據,然后剛才在定義序列的時候給他起的名字叫做my_nn,然后要得到一個結果你只需要在這個my_nn當中把實際的x給傳進去,相當于這一塊x來了之后,先走my_nn中的第一個torch.nn.Linear(),再走第二個torch.nn.Sigmoid(),再走第三個torch.nn.Linear()按照這個順序得到一個輸出結果,這就完事了;所以預測值比較簡單,不需要一步步去寫他是怎么計算的,只需要把它傳入到我們剛才定義好的序列模塊當中就可以了;然后計算損失值使用定義的cost方法MSELoss;然后做優化,優化過程中每次迭代一次要對梯度進行清0的操作optimizer.zero_grad()(這一步放到后邊也行),然后進行一次反向傳播,接下來optimizer.step()就是說我們要不要去做一個更新,.step相當于把前邊的所有的更新操作放入到這一個函數當中了,直接調用就可以了;接下來為了一會把這個損失打印出來我把這個損失batch_loss給他讀進來就完事了。之后就是打印損失)這一步對應上圖中的第二個圖。

第八步:預測結果

?拿一個x,轉化為tensor的格式,傳到網絡當中,其實傳入到網絡就是相當于走了一次前向傳播,會得到實際的預測值,把實際結果的預測值拿到手就可以了,.data.numpy()相當于轉化成array數組的形式(因為下邊要使用myplot畫圖,不轉化成numpy的格式的話tensor的格式畫不了)。

?第九步:畫圖

?

X軸定義為日期,所以先把日期都拿到手轉化成標準的格式dates;

拿預測的結果值predictions_data(其中predict要reshape一下因為我們要的是一列的格式,不能是一個矩陣的格式。并要構建一個DataFrame,因為基于DataFrame畫圖比較簡單,直接傳進去就得了。)

總結

以上是生活随笔為你收集整理的PyTorch框架:(2)使用PyTorch框架构建神经网络模型---气温预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。