怎么在python中利用PyTorch實現(xiàn)預訓練-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)怎么在python中利用PyTorch實現(xiàn)預訓練,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)從2013年成立,先為仁化等服務(wù)建站,仁化等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為仁化企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

直接加載預訓練模型

如果我們使用的模型和原模型完全一樣,那么我們可以直接加載別人訓練好的模型:

my_resnet = MyResNet(*args, **kwargs)
my_resnet.load_state_dict(torch.load("my_resnet.pth"))

當然這樣的加載方法是基于PyTorch推薦的存儲模型的方法:

torch.save(my_resnet.state_dict(), "my_resnet.pth")

還有第二種加載方法:

my_resnet = torch.load("my_resnet.pth")

加載部分預訓練模型

其實大多數(shù)時候我們需要根據(jù)我們的任務(wù)調(diào)節(jié)我們的模型,所以很難保證模型和公開的模型完全一樣,但是預訓練模型的參數(shù)確實有助于提高訓練的準確率,為了結(jié)合二者的優(yōu)點,就需要我們加載部分預訓練模型。

pretrained_dict = model_zoo.load_url(model_urls['resnet152'])
model_dict = model.state_dict()
# 將pretrained_dict里不屬于model_dict的鍵剔除掉
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}
# 更新現(xiàn)有的model_dict
model_dict.update(pretrained_dict)
# 加載我們真正需要的state_dict
model.load_state_dict(model_dict)

因為需要剔除原模型中不匹配的鍵,也就是層的名字,所以我們的新模型改變了的層需要和原模型對應(yīng)層的名字不一樣,比如:resnet最后一層的名字是fc(PyTorch中),那么我們修改過的resnet的最后一層就不能取這個名字,可以叫fc_

微改基礎(chǔ)模型預訓練

對于改動比較大的模型,我們可能需要自己實現(xiàn)一下再加載別人的預訓練參數(shù)。但是,對于一些基本模型PyTorch中已經(jīng)有了,而且我只想進行一些小的改動那么怎么辦呢?難道我又去實現(xiàn)一遍嗎?當然不是。

我們首先看看怎么進行微改模型。

微改基礎(chǔ)模型

PyTorch中的torchvision里已經(jīng)有很多常用的模型了,可以直接調(diào)用:

  1. AlexNet

  2. VGG

  3. ResNet

  4. SqueezeNet

  5. DenseNet

import torchvision.models as models

resnet18 = models.resnet18()
alexnet = models.alexnet()
squeezenet = models.squeezenet1_0()
densenet = models.densenet_161()

但是對于我們的任務(wù)而言有些層并不是直接能用,需要我們微微改一下,比如,resnet最后的全連接層是分1000類,而我們只有21類;又比如,resnet第一層卷積接收的通道是3, 我們可能輸入圖片的通道是4,那么可以通過以下方法修改:

resnet.conv1 = nn.Conv2d(4, 64, kernel_size=7, stride=2, padding=3, bias=False)
resnet.fc = nn.Linear(2048, 21)

簡單預訓練

模型已經(jīng)改完了,接下來我們就進行簡單預訓練吧。

我們先從torchvision中調(diào)用基本模型,加載預訓練模型,然后,重點來了,將其中的層直接替換為我們需要的層即可:

resnet = torchvision.models.resnet152(pretrained=True)
# 原本為1000類,改為10類
resnet.fc = torch.nn.Linear(2048, 10)

以上就是怎么在python中利用PyTorch實現(xiàn)預訓練,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標題:怎么在python中利用PyTorch實現(xiàn)預訓練-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article38/hijpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、App開發(fā)標簽優(yōu)化、軟件開發(fā)、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管