Pytorch如何加載部分權(quán)重
1.修改網(wǎng)絡層輸出
比如在人臉檢測項目中,已經(jīng)訓練好人臉框的回歸,但是此時需要再加入人臉關鍵點。
為了節(jié)約大量時間,我們可以加載部分權(quán)重。加載的網(wǎng)絡權(quán)重
if os.path.exists(self.load_params): pretext_model = torch.load(self.load_params)
打印出來,會看到網(wǎng)絡權(quán)重存儲在一個字典中,需要修改哪一層,用字典的鍵索引值進行修改。
比如原本輸出層為4,我將網(wǎng)絡輸出層修改為14,又由于輸出的都是坐標值,屬于同一分布,所以我將原參4復制擴充為了14,效果非常好。
w = pretext_model["fc2.weight"] b = pretext_model["fc2.bias"] pretext_model["fc2.weight"] = torch.cat((w,w,w,w[:2]),dim=0) pretext_model["fc2.bias"] = torch.cat((b,b,b,b[:2]),dim=0)
最后加載修改后的參數(shù)
self.net.load_state_dict(pretext_model)
2.刪除或增加了網(wǎng)絡層
查看模型的參數(shù),也是存放在一個字典中
if os.path.exists(self.load_params): pretext_model = torch.load(self.load_params) #加載的參數(shù) model_dict = net.state_dict() #模型參數(shù) print(model_dict) print(pretext_model)
#如果模型有k層,就加載
state_dict = {k: v for k, v in pretext_model.items() if k in model_dict.keys()}
model_dict.update(state_dict)
net.load_state_dict(model_dict)3.遷移學習
有時我們也會用別人的模型,加載與訓練參數(shù),但是需要對輸出層做一些修改,一般有兩種方法,直接修改輸出層個數(shù)或增加網(wǎng)絡層
修改輸出層個數(shù)
net = models.vgg19(pretrained=True) #下載與訓練參數(shù) print(net) #查看網(wǎng)絡結(jié)構(gòu) net.classifier[6] = torch.nn.Linear(4096,10) #將輸出層修改為10分類
增加輸出網(wǎng)絡層
num_fc_ftr = net.classifier[6] net.fc = nn.Linear(num_fc_ftr, 128) net.out = nn.Linear(128, 10)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Pandas設置數(shù)據(jù)顯示格式實現(xiàn)方式
這篇文章主要介紹了Pandas設置數(shù)據(jù)顯示格式實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-10-10
Python中創(chuàng)建游戲的第一步之安裝Pygame庫教程
Pygame是跨平臺Python模塊,專為電子游戲設計,包含圖像、聲音,下面這篇文章主要給大家介紹了關于Python中創(chuàng)建游戲的第一步之安裝Pygame庫的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06
Python中的優(yōu)先隊列(priority?queue)和堆(heap)
這篇文章主要介紹了Python中的優(yōu)先隊列(priority?queue)和堆(heap),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
Python和Ruby中each循環(huán)引用變量問題(一個隱秘BUG?)
這篇文章主要介紹了Python和Ruby中each循環(huán)引用變量問題,類似PHP的foreach中使用引用變量的問題,需要的朋友可以參考下2014-06-06

