小白學習之pytorch框架(3)-模型訓練三要素+torch.nn.Linear()


 模型訓練的三要素:數據處理、損失函數、優化算法 

   數據處理(模塊torch.utils.data)

從線性回歸的的簡潔實現-初始化模型參數(模塊torch.nn.init)開始

from torch.nn import init # pytorch的init模塊提供了多中參數初始化方法

init.normal_(net[0].weight, mean=0, std=0.01)    #初始化net[0].weight的期望為0,標准差為0.01的正態分布tensor
init.constant_(net[0].bias, val=0)  #初始化net[0].bias,值為0的常數tensor
# 此外還封裝了好多
# init.ones_(w) 初始化一個形狀如w的全1分布的tensor,如w是3行5列,則初始化為3行5列的全1tensor
# init.zeros_(w) 初始化一個形狀如w的全0分布的tensor
# init.eye_(w) 初始化一個形狀如w的對角線為1,其余為0的tensor
# init.sparse_(w,sparsity=0.1) 初始化一個形狀如w稀疏性為0.1的稀疏矩陣

 損失函數(模塊torch.nn含有大量的神經網絡層)

 pytorch的nn模塊中定義了各種損失函數,這些損失函數可以看成一種特殊的網絡層 

loss = nn.MSELoss()  # 均方誤差損失函數
#
torch.nn.MSELoss(reduce=True, size_average=True)
# reduce=True,返回標量形式的loss,reduce=False,返回向量形式的loss
# size_average=True,返回loss.mean(),size_average=False,返回loss.sum()
# 默認兩者皆為True

 優化算法(模塊torch.optim)

    torch.optim模塊定義了很多的優化算法,如SGD、Adam、RMSProp等

import torch.optim as optim
optimizer = optim.SGD(net.parameters(), lr=0.03)
print(optimizer)

# 對不同的子網絡設置不同的學習率
optimizer = optim.SGD([
          # 如果對某個參數不指定學習率,就使用最外層的默認學習率
          {'params':net.subnet1.parameters()}, # lr=0.03
          {'params':net.subnet2.parameters(),'lr':0.01}
],lr=0.03)

  設置動態學習率,不是固定一個常數

  方法1、修改optimizer.param_groups中的學習率

#調整學習率
for param_group in optimizer.param_groups:
    param_group['lr'] *= 0.1   # 學習率是之前的0.1倍

  方法2、新建優化器,即構建新的optimizer。使用動量的優化器(如Adam),可能會丟失動量等狀態信息,可能會造成損失函數的收斂出現震盪等情況。

optimizer = optim.SGD([
                {'param':net.subnet1.parameters()},
                {'param':net.subnet2.parameters(),'lr':old_lr*0.1}],lr=0.03)

  上述代碼若不理解net.subnet1.parameters(),可參考博客 https://www.cnblogs.com/hellcat/p/8496727.html   萬分感謝博主     

view(-1,1)   # -1是不確定幾行的意思,在這就是我不確定要取幾行,但是肯定是一列,故view(-1,1);

  torch.view()和numpy.reshape()效果一樣,view操作的是tensor,且view后的tensor和原tensor共享內存,修改其中一個,另一個也會改變,reshape()操作的是nparray。

  線性回歸  

  torch.nn.Linear(in_features,out_features,bias)

  參數解析:

    in_features:輸入特征的數量(或稱為特征數特征向量X的維度),即在房價預測中僅和房齡與面積有關,則in_features=2

    out_features:輸出特征的數量(同in_features)

    bias:偏置,默認為True

  例子請參考 https://www.cnblogs.com/Archer-Fang/p/10645473.html  感謝博主  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM