婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問題

pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問題

熱門標(biāo)簽:商家地圖標(biāo)注海報(bào) 孝感營銷電話機(jī)器人效果怎么樣 聊城語音外呼系統(tǒng) 打電話機(jī)器人營銷 海外網(wǎng)吧地圖標(biāo)注注冊 南陽打電話機(jī)器人 ai電銷機(jī)器人的優(yōu)勢 騰訊地圖標(biāo)注沒法顯示 地圖標(biāo)注自己和別人標(biāo)注區(qū)別

pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑

修改部分層,仍然調(diào)用之前的模型參數(shù)。

resnet = resnet50(pretrained=False)
resnet.load_state_dict(torch.load(args.predir))
 
res_conv31 = Bottleneck_dilated(1024, 256,dilated_rate = 2)
print("---------------------",res_conv31)
print("---------------------",resnet.layer3[1])
 
res_conv31.load_state_dict(resnet.layer3[1].state_dict())

網(wǎng)絡(luò)預(yù)訓(xùn)練模型與之前的模型對應(yīng)不上,名稱差個(gè)前綴

model_dict = model.state_dict()
# print(model_dict)
pretrained_dict = torch.load("/yzc/reid_testpcb/se_resnet50-ce0d4300.pth")
keys = []
for k, v in pretrained_dict.items():
       keys.append(k)
i = 0
for k, v in model_dict.items():
    if v.size() == pretrained_dict[keys[i]].size():
         model_dict[k] = pretrained_dict[keys[i]]
         #print(model_dict[k])
         i = i + 1
model.load_state_dict(model_dict)

最后是修改參數(shù)名拿來用的,

from collections import OrderedDict
pretrained_dict = torch.load('premodel')
 
new_state_dict = OrderedDict()
 
# for k, v in mgn_state_dict.items():
#     name = k[7:]  # remove `module.`
#     new_state_dict[name] = v
# self.model = self.model.load_state_dict(new_state_dict)
 
for k, v in pretrained_dict.items():
    name = "model.module."+k   # remove `module.`
    # print(name)
    new_state_dict[name] = v
self.model.load_state_dict(new_state_dict)

pytorch:加載預(yù)訓(xùn)練模型中的部分參數(shù),并固定該部分參數(shù)(真實(shí)有效)

大家在學(xué)習(xí)pytorch時(shí),可能想利用pytorch進(jìn)行fine-tune,但是又煩惱于參數(shù)的加載問題。下面我將講訴我的使用心得。

Step1: 加載預(yù)訓(xùn)練模型,并去除需要再次訓(xùn)練的層

#注意:需要重新訓(xùn)練的層的名字要和之前的不同。
model=resnet()#自己構(gòu)建的模型,以resnet為例
model_dict = model.state_dict()
pretrained_dict = torch.load('xxx.pkl')
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}
model_dict.update(pretrained_dict)
model.load_state_dict(model_dict)

Step2:固定部分參數(shù)

#k是可訓(xùn)練參數(shù)的名字,v是包含可訓(xùn)練參數(shù)的一個(gè)實(shí)體
#可以先print(k),找到自己想進(jìn)行調(diào)整的層,并將該層的名字加入到if語句中:
for k,v in model.named_parameters():
    if k!='xxx.weight' and k!='xxx.bias' :
        v.requires_grad=False#固定參數(shù)

Step3:訓(xùn)練部分參數(shù)

#將要訓(xùn)練的參數(shù)放入優(yōu)化器
optimizer2=torch.optim.Adam(params=[model.xxx.weight,model.xxx.bias],lr=learning_rate,betas=(0.9,0.999),weight_decay=1e-5)

Step4:檢查部分參數(shù)是否固定

debug之后,程序正常運(yùn)行,最好檢查一下網(wǎng)絡(luò)的參數(shù)是否真的被固定了,如何沒固定,網(wǎng)絡(luò)的狀態(tài)接近于重新訓(xùn)練,可能會(huì)導(dǎo)致網(wǎng)絡(luò)性能不穩(wěn)定,也沒辦法得到想要得到的性能提升。

for k,v in model.named_parameters():
   if k!='xxx.weight' and k!='xxx.bias' :
   print(v.requires_grad)#理想狀態(tài)下,所有值都是False

需要注意的是,操作失誤最大的影響是,loss函數(shù)幾乎不會(huì)發(fā)生變化,一直處于最開始的狀態(tài),這很可能是因?yàn)樗袇?shù)都被固定了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Pytorch通過保存為ONNX模型轉(zhuǎn)TensorRT5的實(shí)現(xiàn)
  • pytorch_pretrained_bert如何將tensorflow模型轉(zhuǎn)化為pytorch模型
  • pytorch模型的保存和加載、checkpoint操作
  • PyTorch 如何檢查模型梯度是否可導(dǎo)
  • 解決Pytorch修改預(yù)訓(xùn)練模型時(shí)遇到key不匹配的情況
  • PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?

標(biāo)簽:六盤水 楊凌 迪慶 聊城 牡丹江 南寧 揚(yáng)州 撫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問題》,本文關(guān)鍵詞  pytorch,預(yù),訓(xùn)練,模型,讀取,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 扬州市| 万载县| 织金县| 玉屏| 清原| 汾西县| 内乡县| 万荣县| 曲沃县| 卢氏县| 滨州市| 墨脱县| 峨边| 临江市| 保山市| 麦盖提县| 天津市| 五莲县| 绥中县| 兰考县| 彰武县| 绥芬河市| 鹤山市| 海城市| 河间市| 宁强县| 福鼎市| 谷城县| 南澳县| 札达县| 仙桃市| 绿春县| 西峡县| 宝应县| 雷波县| 南昌市| 读书| 鄂托克前旗| 中江县| 海城市| 新竹市|