最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年06月05日 10:32:39   作者:DRACO于  
這篇文章主要介紹了pytorch 預(yù)訓(xùn)練模型讀取修改相關(guān)參數(shù)的填坑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)練模型與之前的模型對(duì)應(yīng)不上,名稱(chē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ù)名拿來(lái)用的,

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ù)的加載問(wèn)題。下面我將講訴我的使用心得。

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語(yǔ)句中:
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ù)是否真的被固定了,如何沒(méi)固定,網(wǎng)絡(luò)的狀態(tài)接近于重新訓(xùn)練,可能會(huì)導(dǎo)致網(wǎng)絡(luò)性能不穩(wěn)定,也沒(méi)辦法得到想要得到的性能提升。

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ā)生變化,一直處于最開(kāi)始的狀態(tài),這很可能是因?yàn)樗袇?shù)都被固定了。

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

相關(guān)文章

  • 使用matplotlib中scatter方法畫(huà)散點(diǎn)圖

    使用matplotlib中scatter方法畫(huà)散點(diǎn)圖

    這篇文章主要為大家詳細(xì)介紹了使用matplotlib中scatter方法畫(huà)散點(diǎn)圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 使用jupyter Nodebook查看函數(shù)或方法的參數(shù)以及使用情況

    使用jupyter Nodebook查看函數(shù)或方法的參數(shù)以及使用情況

    這篇文章主要介紹了使用jupyter Nodebook查看函數(shù)或方法的參數(shù)以及使用情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python配置mssql連接的方法

    python配置mssql連接的方法

    這篇文章主要介紹了python配置mssql連接的方法,需要的朋友可以參考下
    2021-06-06
  • 基于python中的TCP及UDP(詳解)

    基于python中的TCP及UDP(詳解)

    下面小編就為大家?guī)?lái)一篇基于python中的TCP及UDP(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望對(duì)大家有所幫助
    2017-11-11
  • python多線程并發(fā)實(shí)例及其優(yōu)化

    python多線程并發(fā)實(shí)例及其優(yōu)化

    這篇文章主要介紹了python多線程并發(fā)實(shí)例及其優(yōu)化,threading是擴(kuò)展模塊,在thread的基礎(chǔ)上進(jìn)行了封裝及改進(jìn)。所以只需要使用threading這個(gè)模塊就能完成并發(fā)的測(cè)試,需要的朋友可以參考下
    2019-06-06
  • pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法

    pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法

    如果你在Anaconda中創(chuàng)建了虛擬環(huán)境,但是無(wú)法找到python.exe,可能是因?yàn)樘摂M環(huán)境的Python路徑?jīng)]有添加到系統(tǒng)環(huán)境變量中,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法,需要的朋友可以參考下
    2024-07-07
  • keras中的loss、optimizer、metrics用法

    keras中的loss、optimizer、metrics用法

    這篇文章主要介紹了keras中的loss、optimizer、metrics用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python?自定義裝飾器使用及原理詳解(最新推薦)

    python?自定義裝飾器使用及原理詳解(最新推薦)

    本文詳細(xì)介紹了Python裝飾器的原理和使用方法,包括簡(jiǎn)單的裝飾器、帶參數(shù)的裝飾器、原函數(shù)的傳參、保留原函數(shù)元數(shù)據(jù)以及類(lèi)裝飾器,通過(guò)這些講解,讀者可以全面了解裝飾器的強(qiáng)大功能和應(yīng)用技巧,感興趣的朋友一起看看吧
    2025-02-02
  • python實(shí)現(xiàn)的簡(jiǎn)單FTP上傳下載文件實(shí)例

    python實(shí)現(xiàn)的簡(jiǎn)單FTP上傳下載文件實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)的簡(jiǎn)單FTP上傳下載文件的方法,實(shí)例分析了Python基于FTP模塊實(shí)現(xiàn)文件傳輸?shù)募记?需要的朋友可以參考下
    2015-06-06
  • Python中的asyncio代碼詳解

    Python中的asyncio代碼詳解

    asyncio 是用來(lái)編寫(xiě) 并發(fā) 代碼的庫(kù),使用 async/await 語(yǔ)法。 asyncio 被用作多個(gè)提供高性能 Python 異步框架的基礎(chǔ),包括網(wǎng)絡(luò)和網(wǎng)站服務(wù),數(shù)據(jù)庫(kù)連接庫(kù),分布式任務(wù)隊(duì)列等等。這篇文章主要介紹了Python中的asyncio,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

桓台县| 太谷县| 疏勒县| 长岭县| 昌邑市| 彝良县| 柏乡县| 昌平区| 文安县| 固始县| 宜川县| 嘉荫县| 乌拉特后旗| 扬中市| 新蔡县| 铜梁县| 叶城县| 梧州市| 宕昌县| 沁源县| 柯坪县| 巨鹿县| 色达县| 湘阴县| 侯马市| 砚山县| 衢州市| 德安县| 稷山县| 灵川县| 封开县| 铜鼓县| 望江县| 厦门市| 牙克石市| 肃北| 鹤岗市| 汤阴县| 台南市| 昂仁县| 金塔县|