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

主頁 > 知識庫 > pytorch fine-tune 預訓練的模型操作

pytorch fine-tune 預訓練的模型操作

熱門標簽:地圖標注面積 所得系統電梯怎樣主板設置外呼 儋州電話機器人 北京電銷外呼系統加盟 佛山400電話辦理 朝陽手機外呼系統 小蘇云呼電話機器人 北瀚ai電銷機器人官網手機版 市場上的電銷機器人

之一:

torchvision 中包含了很多預訓練好的模型,這樣就使得 fine-tune 非常容易。本文主要介紹如何 fine-tune torchvision 中預訓練好的模型。

安裝

pip install torchvision

如何 fine-tune

以 resnet18 為例:

from torchvision import models
from torch import nn
from torch import optim
 
resnet_model = models.resnet18(pretrained=True) 
# pretrained 設置為 True,會自動下載模型 所對應權重,并加載到模型中
# 也可以自己下載 權重,然后 load 到 模型中,源碼中有 權重的地址。
 
# 假設 我們的 分類任務只需要 分 100 類,那么我們應該做的是
# 1. 查看 resnet 的源碼
# 2. 看最后一層的 名字是啥 (在 resnet 里是 self.fc = nn.Linear(512 * block.expansion, num_classes))
# 3. 在外面替換掉這個層
resnet_model.fc= nn.Linear(in_features=..., out_features=100)
 
# 這樣就 哦了,修改后的模型除了輸出層的參數是 隨機初始化的,其他層都是用預訓練的參數初始化的。
 
# 如果只想訓練 最后一層的話,應該做的是:
# 1. 將其它層的參數 requires_grad 設置為 False
# 2. 構建一個 optimizer, optimizer 管理的參數只有最后一層的參數
# 3. 然后 backward, step 就可以了
 
# 這一步可以節省大量的時間,因為多數的參數不需要計算梯度
for para in list(resnet_model.parameters())[:-2]:
    para.requires_grad=False 
 
optimizer = optim.SGD(params=[resnet_model.fc.weight, resnet_model.fc.bias], lr=1e-3)
 
...

為什么

這里介紹下 運行resnet_model.fc= nn.Linear(in_features=..., out_features=100)時 框架內發生了什么

這時應該看 nn.Module 源碼的 __setattr__ 部分,因為 setattr 時都會調用這個方法:

def __setattr__(self, name, value):
    def remove_from(*dicts):
        for d in dicts:
            if name in d:
                del d[name]

首先映入眼簾就是 remove_from 這個函數,這個函數的目的就是,如果出現了 同名的屬性,就將舊的屬性移除。 用剛才舉的例子就是:

預訓練的模型中 有個 名字叫fc 的 Module。

在類定義外,我們 將另一個 Module 重新 賦值給了 fc。

類定義內的 fc 對應的 Module 就會從 模型中 刪除。

之二:

前言

這篇文章算是論壇PyTorch Forums關于參數初始化和finetune的總結,也是我在寫代碼中用的算是“最佳實踐”吧。最后希望大家沒事多逛逛論壇,有很多高質量的回答。

參數初始化

參數的初始化其實就是對參數賦值。而我們需要學習的參數其實都是Variable,它其實是對Tensor的封裝,同時提供了data,grad等借口,這就意味著我們可以直接對這些參數進行操作賦值了。這就是PyTorch簡潔高效所在。

所以我們可以進行如下操作進行初始化,當然其實有其他的方法,但是這種方法是PyTorch作者所推崇的:

def weight_init(m):
# 使用isinstance來判斷m屬于什么類型
    if isinstance(m, nn.Conv2d):
        n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
        m.weight.data.normal_(0, math.sqrt(2. / n))
    elif isinstance(m, nn.BatchNorm2d):
# m中的weight,bias其實都是Variable,為了能學習參數以及后向傳播
        m.weight.data.fill_(1)
        m.bias.data.zero_()

Finetune

往往在加載了預訓練模型的參數之后,我們需要finetune模型,可以使用不同的方式finetune。

局部微調

有時候我們加載了訓練模型后,只想調節最后的幾層,其他層不訓練。其實不訓練也就意味著不進行梯度計算,PyTorch中提供的requires_grad使得對訓練的控制變得非常簡單。

model = torchvision.models.resnet18(pretrained=True)
for param in model.parameters():
    param.requires_grad = False
# 替換最后的全連接層, 改為訓練100類
# 新構造的模塊的參數默認requires_grad為True
model.fc = nn.Linear(512, 100)
 
# 只優化最后的分類層
optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)

全局微調

有時候我們需要對全局都進行finetune,只不過我們希望改換過的層和其他層的學習速率不一樣,這時候我們可以把其他層和新層在optimizer中單獨賦予不同的學習速率。比如:

ignored_params = list(map(id, model.fc.parameters()))
base_params = filter(lambda p: id(p) not in ignored_params,
                     model.parameters())
 
optimizer = torch.optim.SGD([
            {'params': base_params},
            {'params': model.fc.parameters(), 'lr': 1e-3}
            ], lr=1e-2, momentum=0.9)

其中base_params使用1e-3來訓練,model.fc.parameters使用1e-2來訓練,momentum是二者共有的。

之三:

pytorch finetune模型

文章主要講述如何在pytorch上讀取以往訓練的模型參數,在模型的名字已經變更的情況下又如何讀取模型的部分參數等。

pytorch 模型的存儲與讀取

其中在模型的保存過程有存儲模型和參數一起的也有單獨存儲模型參數的

單獨存儲模型參數

存儲時使用:

torch.save(the_model.state_dict(), PATH)

讀取時:

the_model = TheModelClass(*args, **kwargs)
the_model.load_state_dict(torch.load(PATH))

存儲模型與參數

存儲:

torch.save(the_model, PATH)

讀取:

the_model = torch.load(PATH)

模型的參數

fine-tune的過程是讀取原有模型的參數,但是由于模型的所要處理的數據集不同,最后的一層class的總數不同,所以需要修改模型的最后一層,這樣模型讀取的參數,和在大數據集上訓練好下載的模型參數在形式上不一樣。需要我們自己去寫函數讀取參數。

pytorch模型參數的形式

模型的參數是以字典的形式存儲的。

model_dict = the_model.state_dict(),
for k,v in model_dict.items():
    print(k)

即可看到所有的鍵值

如果想修改模型的參數,給相應的鍵值賦值即可

model_dict[k] = new_value

最后更新模型的參數

the_model.load_state_dict(model_dict)

如果模型的key值和在大數據集上訓練時的key值是一樣的

我們可以通過下列算法進行讀取模型

model_dict = model.state_dict() 
pretrained_dict = torch.load(model_path)
 # 1. filter out unnecessary keys
diff = {k: v for k, v in model_dict.items() if \

            k in pretrained_dict and pretrained_dict[k].size() == v.size()}
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict and model_dict[k].size() == v.size()}
pretrained_dict.update(diff)
# 2. overwrite entries in the existing state dict
model_dict.update(pretrained_dict)
# 3. load the new state dict
model.load_state_dict(model_dict)

如果模型的key值和在大數據集上訓練時的key值是不一樣的,但是順序是一樣的

model_dict = model.state_dict() 
pretrained_dict = torch.load(model_path)
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():
        print(k, ',', keys[i])
         model_dict[k]=pretrained_dict[keys[i]]
    i = i + 1
model.load_state_dict(model_dict)

如果模型的key值和在大數據集上訓練時的key值是不一樣的,但是順序是也不一樣的

自己找對應關系,一個key對應一個key的賦值

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

您可能感興趣的文章:
  • Pytorch之finetune使用詳解
  • python PyTorch參數初始化和Finetune
  • python PyTorch預訓練示例

標簽:金融催收 寧夏 商丘 江蘇 云南 龍巖 酒泉 定西

巨人網絡通訊聲明:本文標題《pytorch fine-tune 預訓練的模型操作》,本文關鍵詞  pytorch,fine-tune,預,訓練,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch fine-tune 預訓練的模型操作》相關的同類信息!
  • 本頁收集關于pytorch fine-tune 預訓練的模型操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久亚区不卡日本| 欧美高清在线一区| 成人丝袜18视频在线观看| 日韩专区欧美专区| 91精品国产91综合久久蜜臀| av亚洲精华国产精华精| 日韩成人免费电影| 日本sm残虐另类| 无码av中文一区二区三区桃花岛| 国产欧美日韩激情| 一本大道久久a久久综合| 日韩欧美另类在线| 欧美亚洲一区三区| 成人综合在线网站| 亚洲色图欧洲色图| 久久先锋资源网| 日韩一区二区三区av| 欧美一区二区三区免费视频| 亚洲国产综合人成综合网站| 免费美女久久99| 欧美日韩免费高清一区色橹橹 | 午夜精品久久久久久久久久久| 欧美日韩国产a| 国产精品综合久久| 久久亚洲二区三区| 成人av在线播放网站| 欧美精品一区二区在线观看| 欧美激情一区在线| 日韩美女视频一区二区在线观看| 另类专区欧美蜜桃臀第一页| 国产一区二区精品久久| 久久国产免费看| 麻豆精品久久精品色综合| 国产99精品国产| 日本女优在线视频一区二区| 亚洲人成电影网站色mp4| 亚洲一区二区三区自拍| 美国av一区二区| 福利一区二区在线| 成人综合婷婷国产精品久久免费| 不卡在线视频中文字幕| 欧美日韩在线一区二区| 欧美写真视频网站| 欧美va亚洲va香蕉在线| 亚洲精品国产第一综合99久久| 亚洲欧美视频一区| 国产精品国产三级国产普通话蜜臀 | 一区二区三区**美女毛片| 亚洲一二三四区| 一区二区三区在线视频播放| 经典三级视频一区| proumb性欧美在线观看| 在线播放欧美女士性生活| 国产欧美一二三区| 六月丁香综合在线视频| 精品国产伦理网| 中文字幕一区二区三区乱码在线| 91精品国产综合久久久久久漫画| 国产不卡一区视频| 色综合久久久久久久| 欧美日韩国产天堂| 日韩成人免费电影| av男人天堂一区| 国产成人午夜高潮毛片| 色婷婷综合久色| 蜜臀久久99精品久久久久久9| 美女尤物国产一区| 色婷婷国产精品| 精品国产露脸精彩对白| 亚洲h精品动漫在线观看| 色综合中文字幕国产 | 国产三级精品视频| 亚洲地区一二三色| 亚洲成在人线在线播放| 精品亚洲成a人在线观看| av不卡一区二区三区| 91免费版在线看| 中文字幕视频一区二区三区久| 国产精品网站一区| 国产精品免费av| 亚洲视频在线一区| 精品三级在线观看| 精品精品国产高清a毛片牛牛| 色狠狠色狠狠综合| 成a人片亚洲日本久久| 国产成人精品免费在线| 成人在线视频一区二区| 日韩一区国产二区欧美三区| 欧美成人vps| 久久精品av麻豆的观看方式| 一本到不卡精品视频在线观看| 国产调教视频一区| 麻豆精品视频在线观看免费| 精品亚洲免费视频| 9191国产精品| 亚洲在线视频免费观看| 色就色 综合激情| 五月婷婷综合网| 欧美一区二区三级| 色狠狠色噜噜噜综合网| 亚洲精品一卡二卡| 大胆亚洲人体视频| 在线综合视频播放| 久久久久久免费网| 国产香蕉久久精品综合网| 欧美videos大乳护士334| 一区二区三区在线视频播放| 奇米精品一区二区三区在线观看| 中文字幕在线观看一区二区| 一区二区三区四区五区视频在线观看| 亚洲婷婷综合色高清在线| 精品国产自在久精品国产| 色婷婷精品久久二区二区蜜臂av| 91精品欧美综合在线观看最新| 在线看不卡av| 国产一区中文字幕| 在线欧美日韩国产| 99精品热视频| 成人亚洲一区二区一| 麻豆国产欧美日韩综合精品二区 | 日韩欧美黄色影院| 国产精品麻豆一区二区 | 精品国精品国产| wwwwww.欧美系列| 一区免费观看视频| 成人av资源下载| 成人av小说网| 99久久国产免费看| 久久色.com| 久久久久久久综合日本| 麻豆精品一区二区三区| 91久久精品一区二区| 亚洲一区二区三区中文字幕| 日韩一区二区不卡| 国产视频一区二区在线观看| 日韩一区二区免费在线电影| 国产精品伊人色| 精品一区二区三区久久| 麻豆精品一区二区| 国产在线看一区| 国产欧美一区二区精品忘忧草| 午夜成人免费视频| 成人av手机在线观看| 喷水一区二区三区| 精品欧美一区二区久久| 色素色在线综合| 一区二区三区四区在线播放| 精品一区二区三区免费播放 | www.欧美.com| 国产视频在线观看一区二区三区| 亚洲精品视频在线观看网站| 欧美性猛交xxxx黑人交 | 欧美乱妇20p| 欧美videossexotv100| 日韩精品免费专区| 国产不卡视频在线观看| 成a人片亚洲日本久久| 欧美精品一区二区三区在线播放| 蜜桃视频在线一区| 精品视频免费看| 日韩电影网1区2区| 亚洲精品日韩一| 欧美日韩一区在线| 精品处破学生在线二十三| 精品卡一卡二卡三卡四在线| 色综合色综合色综合色综合色综合| 一本色道久久综合精品竹菊| 国产欧美日韩卡一| 黄一区二区三区| 91精品在线观看入口| 日本精品免费观看高清观看| 九九**精品视频免费播放| 欧美电视剧在线观看完整版| 亚洲另类一区二区| 精品无人区卡一卡二卡三乱码免费卡 | 高清国产午夜精品久久久久久| 欧美成人bangbros| 国产激情偷乱视频一区二区三区| 欧美亚洲国产一区二区三区va| 中文字幕日韩av资源站| 蜜桃视频在线观看一区二区| 视频一区视频二区在线观看| 亚洲国产精品精华液2区45| 国产福利视频一区二区三区| 国产二区国产一区在线观看| 成人黄页毛片网站| 亚洲综合精品久久| 亚洲国产三级在线| 国产性做久久久久久| 久久天天做天天爱综合色| 国产精品久久久久影院老司| 国产尤物一区二区| 3d动漫精品啪啪1区2区免费| 成人免费高清在线观看| 精品毛片乱码1区2区3区| 成人黄色综合网站| 香蕉久久一区二区不卡无毒影院| 色呦呦一区二区三区| 久久精品男人的天堂| 一级日本不卡的影视|