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

pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法

 更新時(shí)間:2019年08月17日 14:58:25   作者:馬管子  
今天小編就為大家分享一篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

實(shí)踐中,針對(duì)不同的任務(wù)需求,我們經(jīng)常會(huì)在現(xiàn)成的網(wǎng)絡(luò)結(jié)構(gòu)上做一定的修改來(lái)實(shí)現(xiàn)特定的目的。

假如我們現(xiàn)在有一個(gè)簡(jiǎn)單的兩層感知機(jī)網(wǎng)絡(luò):

# -*- coding: utf-8 -*-
import torch
from torch.autograd import Variable
import torch.optim as optim
 
x = Variable(torch.FloatTensor([1, 2, 3])).cuda()
y = Variable(torch.FloatTensor([4, 5])).cuda()
 
class MLP(torch.nn.Module):
  def __init__(self):
    super(MLP, self).__init__()
    self.linear1 = torch.nn.Linear(3, 5)
    self.relu = torch.nn.ReLU()
    self.linear2 = torch.nn.Linear(5, 2)
 
  def forward(self, x):
    x = self.linear1(x)
    x = self.relu(x)
    x = self.linear2(x)
 
    return x
 
model = MLP().cuda()
 
loss_fn = torch.nn.MSELoss(size_average=False)
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
 
for t in range(500):
  y_pred = model(x)
  loss = loss_fn(y_pred, y)
  print(t, loss.data[0])
  model.zero_grad()
  loss.backward()
  optimizer.step()
 
print(model(x))

現(xiàn)在想在前向傳播時(shí),在relu之后給x乘以一個(gè)可訓(xùn)練的系數(shù),只需要在__init__函數(shù)中添加一個(gè)nn.Parameter類型變量,并在forward函數(shù)中乘以該變量即可:

class MLP(torch.nn.Module):
  def __init__(self):
    super(MLP, self).__init__()
    self.linear1 = torch.nn.Linear(3, 5)
    self.relu = torch.nn.ReLU()
    self.linear2 = torch.nn.Linear(5, 2)
    # the para to be added and updated in train phase, note that NO cuda() at last
    self.coefficient = torch.nn.Parameter(torch.Tensor([1.55]))
 
  def forward(self, x):
    x = self.linear1(x)
    x = self.relu(x)
    x = self.coefficient * x
    x = self.linear2(x)
 
    return x

注意,Parameter變量和Variable變量的操作大致相同,但是不能手動(dòng)調(diào)用.cuda()方法將其加載在GPU上,事實(shí)上它會(huì)自動(dòng)在GPU上加載,可以通過(guò)model.state_dict()或者model.named_parameters()函數(shù)查看現(xiàn)在的全部可訓(xùn)練參數(shù)(包括通過(guò)繼承得到的父類中的參數(shù)):

print(model.state_dict().keys())
for i, j in model.named_parameters():
  print(i)
  print(j)

輸出如下:

odict_keys(['linear1.weight', 'linear1.bias', 'linear2.weight', 'linear2.bias'])
linear1.weight
Parameter containing:
-0.3582 -0.0283 0.2607
 0.5190 -0.2221 0.0665
-0.2586 -0.3311 0.1927
-0.2765 0.5590 -0.2598
 0.4679 -0.2923 -0.3379
[torch.cuda.FloatTensor of size 5x3 (GPU 0)]
 
linear1.bias
Parameter containing:
-0.2549
-0.5246
-0.1109
 0.5237
-0.1362
[torch.cuda.FloatTensor of size 5 (GPU 0)]
 
linear2.weight
Parameter containing:
-0.0286 -0.3045 0.1928 -0.2323 0.2966
 0.2601 0.1441 -0.2159 0.2484 0.0544
[torch.cuda.FloatTensor of size 2x5 (GPU 0)]
 
linear2.bias
Parameter containing:
-0.4038
 0.3129
[torch.cuda.FloatTensor of size 2 (GPU 0)]

這個(gè)參數(shù)會(huì)在反向傳播時(shí)與原有變量同時(shí)參與更新,這就達(dá)到了添加可訓(xùn)練參數(shù)的目的。

如果我們有原先網(wǎng)絡(luò)的預(yù)訓(xùn)練權(quán)重,現(xiàn)在添加了一個(gè)新的參數(shù),原有的權(quán)重文件自然就不能加載了,我們需要修改原權(quán)重文件,在其中添加我們的新變量的初始值。

調(diào)用model.state_dict查看我們添加的參數(shù)在參數(shù)字典中的完整名稱,然后打開(kāi)原先的權(quán)重文件:

a = torch.load("OldWeights.pth") a是一個(gè)collecitons.OrderedDict類型變量,也就是一個(gè)有序字典,直接將新參數(shù)名稱和初始值作為鍵值對(duì)插入,然后保存即可。

a = torch.load("OldWeights.pth")
 
a["layer1.0.coefficient"] = torch.FloatTensor([1.2])
a["layer1.1.coefficient"] = torch.FloatTensor([1.5])
 
torch.save(a, "Weights.pth")

現(xiàn)在權(quán)重就可以加載在修改后的模型上了。

以上這篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python多層裝飾器用法實(shí)例分析

    Python多層裝飾器用法實(shí)例分析

    這篇文章主要介紹了Python多層裝飾器用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Python多層裝飾器的相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下
    2018-02-02
  • Python操作word文檔的示例詳解

    Python操作word文檔的示例詳解

    本文為大家介紹了Python操作docx文檔相關(guān)知識(shí)點(diǎn)。主要涉及的內(nèi)容為python-docx?,一款可以操作Word文檔(僅支持docx)的第三方庫(kù)??旄S小編一起學(xué)習(xí)一下吧
    2022-01-01
  • Django返回HTML文件的實(shí)現(xiàn)方法

    Django返回HTML文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Django返回HTML文件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換的實(shí)現(xiàn)

    Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python中pickle模塊淺析

    python中pickle模塊淺析

    在本篇文章里小編給大家整理的是關(guān)于python中pickle模塊的基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • 總結(jié)Python連接CS2000的詳細(xì)步驟

    總結(jié)Python連接CS2000的詳細(xì)步驟

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著Python連接CS2000的詳細(xì)步驟展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • python3實(shí)現(xiàn)名片管理系統(tǒng)

    python3實(shí)現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python面向?qū)ο缶幊淘O(shè)計(jì)原則之單一職責(zé)原則詳解

    python面向?qū)ο缶幊淘O(shè)計(jì)原則之單一職責(zé)原則詳解

    這篇文章主要為大家詳細(xì)介紹了python面向?qū)ο缶幊淘O(shè)計(jì)原則之單一職責(zé)原則,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Python使用matplotlib和pandas實(shí)現(xiàn)的畫圖操作【經(jīng)典示例】

    Python使用matplotlib和pandas實(shí)現(xiàn)的畫圖操作【經(jīng)典示例】

    這篇文章主要介紹了Python使用matplotlib和pandas實(shí)現(xiàn)的畫圖操作,結(jié)合實(shí)例形式分析了Python基于matplotlib和pandas的數(shù)值運(yùn)算與圖形顯示操作相關(guān)實(shí)現(xiàn)技巧,并對(duì)部分代碼的圖形顯示進(jìn)行了顯示效果測(cè)試,需要的朋友可以參考下
    2018-06-06
  • Python調(diào)用Tkinter示例淺析

    Python調(diào)用Tkinter示例淺析

    這篇文章主要介紹了Python調(diào)用Tkinter示例,通過(guò)在Python程序中設(shè)計(jì)按鈕,可以方便用戶調(diào)用Python程序,從而達(dá)到快速、自動(dòng)化、高效的目的,提高用戶體驗(yàn)和工作效率
    2023-02-02

最新評(píng)論

诸暨市| 阿合奇县| 沁阳市| 包头市| 龙川县| 陇南市| 满洲里市| 宁化县| 蒙山县| 茌平县| 诏安县| 分宜县| 上饶县| 金乡县| 桐城市| 安庆市| 依兰县| 甘泉县| 威信县| 娄底市| 鄂尔多斯市| 当雄县| 阳春市| 元氏县| 永平县| 宜昌市| 伊宁市| 万源市| 高碑店市| 喀喇| 稻城县| 内黄县| 大姚县| 荣成市| 西贡区| 沾化县| 格尔木市| 郸城县| 叶城县| 台安县| 南城县|