好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > pytorch加載預訓練模型與自己模型不匹配的解決方案

pytorch加載預訓練模型與自己模型不匹配的解決方案

熱門標簽:海南400電話如何申請 哈爾濱ai外呼系統定制 公司電話機器人 唐山智能外呼系統一般多少錢 廣告地圖標注app 騰訊外呼線路 激戰2地圖標注 白銀外呼系統 陜西金融外呼系統

pytorch中如果自己搭建網絡并且加載別人的與訓練模型的話,如果模型和參數不嚴格匹配,就可能會出問題,接下來記錄一下我的解決方法。

兩個有序字典找不同

模型的參數和pth文件的參數都是有序字典(OrderedDict),把字典中的鍵轉為列表就可以在for循環里迭代找不同了。

model = ResNet18(1)
model_dict1 = torch.load('resnet18.pth')
model_dict2 = model.state_dict()
model_list1 = list(model_dict1.keys())
model_list2 = list(model_dict2.keys())
len1 = len(model_list1)
len2 = len(model_list2)
minlen = min(len1, len2)
for n in range(minlen):
    if model_dict1[model_list1[n]].shape != model_dict2[model_list2[n]].shape:
        err = 1

自己搭建模型的注意事項

搭網絡時要對照pth文件的字典順序搭,字典順序、權重尺寸(shape)和變量命名必須與pth文件完全一致。如果僅僅是變量命名不同,可采用類似的方法對模型的權重重新賦值。

model = ResNet18(1)
model_dict1 = torch.load('resnet18.pth')
model_dict2 = model.state_dict()
model_list1 = list(model_dict1.keys())
model_list2 = list(model_dict2.keys())
len1 = len(model_list1)
len2 = len(model_list2)
minlen = min(len1, len2)
for n in range(minlen):
    if model_dict1[model_list1[n]].shape != model_dict2[model_list2[n]].shape:
        continue
    model_dict1[model_list1[n]] = model_dict2[model_list2[n]]
model.load_state_dict(model_dict2)

完整的代碼見自己搭建resnet18網絡并加載torchvision自帶權重

新增的改進代碼

model_dict1 = torch.load('yolov5.pth')
model_dict2 = model.state_dict()
model_list1 = list(model_dict1.keys())
model_list2 = list(model_dict2.keys())
len1 = len(model_list1)
len2 = len(model_list2)
m, n = 0, 0
while True:
    if m >= len1 or n >= len2:
        break
    layername1, layername2 = model_list1[m], model_list2[n]
    w1, w2 = model_dict1[layername1], model_dict2[layername2]
    if w1.shape != w2.shape:
        continue
    model_dict2[layername2] = model_dict1[layername1]
    m += 1
    n += 1
model.load_state_dict(model_dict2)

如果因為模型不匹配,運行第14行語句后,可看自己情況手動對m或n加上1。

補充:pytorch的一些坑:用預訓練的vgg模型的部分層的特征報錯,如張量不匹配

看代碼吧~

#打算取VGG19的第二個全連接層的輸出,那么就需要構建一個類,這個類要包含VGG的全部卷積層,
#以及到第二個全連接層的全部網絡還有他們對應的參數
class Classification_att(nn.Module):
    def __init__(self, rgb_range):
        super(Classification_att, self).__init__()
        self.vgg19 =models.vgg19(pretrained=True)
        vgg = models.vgg19(pretrained=True).features
        conv_modules = [m for m in vgg]
        self.vgg_conv = nn.Sequential(*conv_modules[:37])
        classfi = models.vgg19(pretrained=True).classifier
        classif_modules = [n for n in classfi]
        self.vgg_class = nn.Sequential(*classif_modules[:4])
        vgg_mean = (0.485, 0.456, 0.406)
        vgg_std = (0.229 * rgb_range, 0.224 * rgb_range, 0.225 * rgb_range)
        self.sub_mean = common.MeanShift(rgb_range, vgg_mean, vgg_std)
        for p in self.vgg_conv.parameters():
            p.requires_grad = False
        for p in self.vgg_class.parameters():
            p.requires_grad = False
        self.classifi = nn.Sequential(
            nn.Linear(4096, 1024),
            nn.ReLU(True),
            nn.Linear(1024, 256),
            nn.ReLU(True),
            nn.Linear(256, 64),
        )
 
    def forward(self, x):
        x = F.interpolate(x, size=[224, 224], scale_factor=None, mode='bilinear', 
        align_corners=False)
        x = self.sub_mean(x)
        x = self.vgg_conv(x)  
        x = self.vgg_class(x)  #執行這部報錯,說張量不匹配

原因是因為卷積層的輸出不能直接連接全連接層,即使輸出的張量的總的大小是一致的

查看vgg的pytorch源碼發現是

x = self.features(x)
x = self.avgpool(x)
x = torch.flatten(x, 1)
x = self.classifier(x)
#自己的代碼沒有torch.flatten(x, 1)這步

所以自己的少了一步

x = torch.flatten(x, 1)

補上就好了!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 解決Pytorch 加載訓練好的模型 遇到的error問題
  • pytorch 更改預訓練模型網絡結構的方法
  • 解決Pytorch修改預訓練模型時遇到key不匹配的情況

標簽:四川 益陽 黑龍江 黔西 上海 常德 鷹潭 惠州

巨人網絡通訊聲明:本文標題《pytorch加載預訓練模型與自己模型不匹配的解決方案》,本文關鍵詞  pytorch,加載,預,訓練,模型,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch加載預訓練模型與自己模型不匹配的解決方案》相關的同類信息!
  • 本頁收集關于pytorch加載預訓練模型與自己模型不匹配的解決方案的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 日本人妻中文人无码视频| 被20个男人灌了一夜精子| 毛片专区| 秋霞电影.| 山上悠亚电影| 精品无码一区二区三区四区久久久| 啊啊啊不要嗯啊| 国产日韩欧美亚洲青青草原| 男人边做边挵进去呻吟的解决方法| 夜夜未满18勿进的爽影院| 国产精品久久久久精品一级APP| 久爱午夜视频_放放电影| 唯美清纯自拍偷| 91丨九色丨蝌蚪丨老板| 欧美白嫩嫩HD4KAV| 欧美猛男同志video在线| 娇喘顶撞深初h1v1| 羞羞漫画??在线入口| 日本www| 国产乱妇无码一区二区三区黑寡妇 | 欧美精品久久一级毛片A片爱妃记 91精品国产综合久久喷水 | 波多野结衣在线一区| 国产成人亚洲精品色欲软件下载| pornoxxx极品另类| 让我过过瘾| 一级毛片全部免费播放| 同居的日子| 色情少妇丰满图片视频网站 | 亚洲va精品中文字幕动漫| 肛门扩张小说| 国产精品久久久久黄无码小说| 中文字幕乱码中文字幕乱码| 美女主播玩自己奶头视频| 一定是我打开的方式不对| 女同学夹得好紧…我要进去了| 欧美日韩乱| 仙王的日常生活淫邪版小说| 十八禁??国产污污的游戏合集| 日本大尺度无打码动漫| 我穿超短裙被同桌cao的好爽| 入禽太深小说|