校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Pytorch模型中的parameter與buffer用法

Pytorch模型中的parameter與buffer用法

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

Parameter 和 buffer

If you have parameters in your model, which should be saved and restored in the state_dict, but not trained by the optimizer, you should register them as buffers.Buffers won't be returned in model.parameters(), so that the optimizer won't have a change to update them.

模型中需要保存下來的參數包括兩種

一種是反向傳播需要被optimizer更新的,稱之為 parameter

一種是反向傳播不需要被optimizer更新,稱之為 buffer

第一種參數我們可以通過 model.parameters() 返回;第二種參數我們可以通過 model.buffers() 返回。因為我們的模型保存的是 state_dict 返回的 OrderDict,所以這兩種參數不僅要滿足是否需要被更新的要求,還需要被保存到OrderDict。

那么現在的問題是這兩種參數如何創建呢,創建好了如何保存到OrderDict呢?

第一種參數有兩種方式

我們可以直接將模型的成員變量(http://self.xxx) 通過nn.Parameter() 創建,會自動注冊到parameters中,可以通過model.parameters() 返回,并且這樣創建的參數會自動保存到OrderDict中去;

通過nn.Parameter() 創建普通Parameter對象,不作為模型的成員變量,然后將Parameter對象通過register_parameter()進行注冊,可以通model.parameters() 返回,注冊后的參數也會自動保存到OrderDict中去;

第二種參數我們需要創建tensor

然后將tensor通過register_buffer()進行注冊,可以通model.buffers() 返回,注冊完后參數也會自動保存到OrderDict中去。

Pytorch中Module,Parameter和Buffer區別

下文都將torch.nn簡寫成nn

Module: 就是我們常用的torch.nn.Module類,你定義的所有網絡結構都必須繼承這個類。

Buffer: buffer和parameter相對,就是指那些不需要參與反向傳播的參數

示例如下:

class MyModel(nn.Module):
 def __init__(self):
  super(MyModel, self).__init__()
  self.my_tensor = torch.randn(1) # 參數直接作為模型類成員變量
  self.register_buffer('my_buffer', torch.randn(1)) # 參數注冊為 buffer
  self.my_param = nn.Parameter(torch.randn(1))
 def forward(self, x):
  return x 

model = MyModel()
print(model.state_dict())
>>>OrderedDict([('my_param', tensor([1.2357])), ('my_buffer', tensor([-0.9982]))])
Parameter: 是nn.parameter.Paramter,也就是組成Module的參數。例如一個nn.Linear通常由weight和bias參數組成。它的特點是默認requires_grad=True,也就是說訓練過程中需要反向傳播的,就需要使用這個
import torch.nn as nn
fc = nn.Linear(2,2)

# 讀取參數的方式一
fc._parameters
>>> OrderedDict([('weight', Parameter containing:
              tensor([[0.4142, 0.0424],
                      [0.3940, 0.0796]], requires_grad=True)),
             ('bias', Parameter containing:
              tensor([-0.2885,  0.5825], requires_grad=True))])
     
# 讀取參數的方式二(推薦這種)
for n, p in fc.named_parameters():
 print(n,p)
>>>weight Parameter containing:
tensor([[0.4142, 0.0424],
        [0.3940, 0.0796]], requires_grad=True)
bias Parameter containing:
tensor([-0.2885,  0.5825], requires_grad=True)

# 讀取參數的方式三
for p in fc.parameters():
 print(p)
>>>Parameter containing:
tensor([[0.4142, 0.0424],
        [0.3940, 0.0796]], requires_grad=True)
Parameter containing:
tensor([-0.2885,  0.5825], requires_grad=True)

通過上面的例子可以看到,nn.parameter.Paramter的requires_grad屬性值默認為True。另外上面例子給出了三種讀取parameter的方法,推薦使用后面兩種,因為是以迭代生成器的方式來讀取,第一種方式是一股腦的把參數全丟給你,要是模型很大,估計你的電腦會吃不消。

另外需要介紹的是_parameters是nn.Module在__init__()函數中就定義了的一個OrderDict類,這個可以通過看下面給出的部分源碼看到,可以看到還初始化了很多其他東西,其實原理都大同小異,你理解了這個之后,其他的也是同樣的道理。

class Module(object):
 ...
    def __init__(self):
        self._backend = thnn_backend
        self._parameters = OrderedDict()
        self._buffers = OrderedDict()
        self._backward_hooks = OrderedDict()
        self._forward_hooks = OrderedDict()
        self._forward_pre_hooks = OrderedDict()
        self._state_dict_hooks = OrderedDict()
        self._load_state_dict_pre_hooks = OrderedDict()
        self._modules = OrderedDict()
        self.training = True

每當我們給一個成員變量定義一個nn.parameter.Paramter的時候,都會自動注冊到_parameters,具體的步驟如下:

import torch.nn as nn
class MyModel(nn.Module):
 def __init__(self):
  super(MyModel, self).__init__()
  # 下面兩種定義方式均可
  self.p1 = nn.paramter.Paramter(torch.tensor(1.0))
  print(self._parameters)
  self.p2 = nn.Paramter(torch.tensor(2.0))
  print(self._parameters)

首先運行super(MyModel, self).__init__(),這樣MyModel就初始化了_paramters等一系列的OrderDict,此時所有變量還都是空的。

self.p1 = nn.paramter.Paramter(torch.tensor(1.0)): 這行代碼會觸發nn.Module預定義好的__setattr__函數,該函數部分源碼如下:

def __setattr__(self, name, value):
 ...
 params = self.__dict__.get('_parameters')
 if isinstance(value, Parameter):
  if params is None:
   raise AttributeError(
    "cannot assign parameters before Module.__init__() call")
  remove_from(self.__dict__, self._buffers, self._modules)
  self.register_parameter(name, value)
 ...

__setattr__函數作用簡單理解就是判斷你定義的參數是否正確,如果正確就繼續調用register_parameter函數進行注冊,這個函數簡單概括就是做了下面這件事

def register_parameter(self,name,param):
 ...
 self._parameters[name]=param

下面我們實例化這個模型看結果怎樣

model = MyModel()
>>>OrderedDict([('p1', Parameter containing:
tensor(1., requires_grad=True))])
OrderedDict([('p1', Parameter containing:
tensor(1., requires_grad=True)), ('p2', Parameter containing:
tensor(2., requires_grad=True))])

結果和上面分析的一致。

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

您可能感興趣的文章:
  • PyTorch里面的torch.nn.Parameter()詳解
  • Pytorch之parameters的使用
  • pytorch 計算Parameter和FLOP的操作

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

巨人網絡通訊聲明:本文標題《Pytorch模型中的parameter與buffer用法》,本文關鍵詞  Pytorch,模型,中的,parameter,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Pytorch模型中的parameter與buffer用法》相關的同類信息!
  • 本頁收集關于Pytorch模型中的parameter與buffer用法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩欧美二区三区| 一区二区三区不卡视频在线观看 | 欧美一区二区三区在线电影| 久久精品视频免费| 成人动漫视频在线| 亚洲男人天堂av网| 欧美性一区二区| 韩国精品在线观看| 亚洲乱码日产精品bd| 欧美三级蜜桃2在线观看| 蜜臀va亚洲va欧美va天堂| 日韩免费性生活视频播放| 成人免费视频视频| 亚洲国产综合视频在线观看| 日韩欧美激情在线| 色久优优欧美色久优优| 麻豆成人久久精品二区三区小说| 久久久精品国产免大香伊| 在线观看一区二区视频| 国产精品一二三| 免费成人你懂的| 亚洲综合激情网| 亚洲欧美成人一区二区三区| 日韩欧美中文一区二区| 在线观看国产精品网站| 93久久精品日日躁夜夜躁欧美| 天天色天天操综合| 亚洲一区欧美一区| 亚洲欧美另类小说| 国产精品美女久久久久久久久久久 | 精品国产乱码久久久久久闺蜜 | 一级做a爱片久久| 久久免费电影网| 日韩亚洲欧美在线| 色综合久久综合| a级精品国产片在线观看| 国产福利精品一区| 国产精品一区二区果冻传媒| 久久精品国产网站| 美女在线一区二区| 精彩视频一区二区| 免费高清在线视频一区·| 青娱乐精品在线视频| 麻豆专区一区二区三区四区五区| 亚洲mv大片欧洲mv大片精品| 奇米一区二区三区| 国产精品99久久久久久有的能看| 成人短视频下载| 欧美天堂亚洲电影院在线播放| 欧美日韩免费一区二区三区视频| 欧美人妇做爰xxxⅹ性高电影| 91.麻豆视频| 欧美高清在线视频| 一区二区三区日韩在线观看| 日韩电影在线观看电影| 国产在线日韩欧美| 在线看国产一区| 国产三级欧美三级日产三级99| 亚洲免费在线视频| 国产精品69毛片高清亚洲| 色综合色综合色综合色综合色综合| 欧美曰成人黄网| 国产精品国产三级国产普通话蜜臀 | 美脚の诱脚舐め脚责91| 色综合久久中文综合久久牛| 日韩欧美一区二区三区在线| 一区二区三区不卡在线观看| 国产91色综合久久免费分享| 91精品国产乱| 欧美激情一区不卡| 亚洲精品一区二区三区影院| 亚洲一区二区视频在线观看| 国产剧情一区在线| 国产亚洲精品资源在线26u| 性做久久久久久免费观看欧美| 色狠狠色噜噜噜综合网| 亚洲人xxxx| 欧美高清视频www夜色资源网| 亚洲免费观看高清在线观看| 99免费精品在线| 亚洲精品福利视频网站| 色八戒一区二区三区| 亚洲国产人成综合网站| 欧美日韩国产美女| 极品销魂美女一区二区三区| 精品三级av在线| 成人久久久精品乱码一区二区三区 | 91精品国产入口| 蜜桃视频在线观看一区二区| 久久久影视传媒| 91伊人久久大香线蕉| 亚洲狠狠爱一区二区三区| 欧美一区二区在线看| 国产精品影音先锋| 亚洲人成影院在线观看| 6080午夜不卡| av一本久道久久综合久久鬼色| 亚洲一本大道在线| 欧美电视剧免费全集观看| 91视频精品在这里| 久久99精品一区二区三区| 亚洲欧美日韩国产手机在线| 精品国产免费视频| 欧美日韩一区二区在线观看视频| 国产精品亚洲午夜一区二区三区| 亚洲丝袜美腿综合| 久久精品一区二区三区四区| 欧美日韩在线亚洲一区蜜芽| 国产91精品一区二区麻豆亚洲| 午夜精品久久久久久不卡8050| 亚洲国产精品成人综合 | 色狠狠桃花综合| 亚洲天堂2014| 精品理论电影在线观看| 欧美日韩一二区| 欧美日韩一区二区三区免费看| 国产suv一区二区三区88区| 韩国精品在线观看| 国产成人在线视频网址| 寂寞少妇一区二区三区| 精品亚洲成a人在线观看| 久国产精品韩国三级视频| 免费成人在线视频观看| 久久狠狠亚洲综合| 奇米色777欧美一区二区| 国产真实精品久久二三区| 日本一区二区三区久久久久久久久不| 91老师国产黑色丝袜在线| 欧美日韩一区在线| 91精品国产91综合久久蜜臀| 日韩免费视频线观看| 韩国欧美国产一区| 亚洲国产精品影院| 国产校园另类小说区| 欧美丰满美乳xxx高潮www| 国产91在线|亚洲| 久久国产精品99久久人人澡| 亚洲人成7777| 亚洲欧洲日产国码二区| 日韩女优视频免费观看| 91极品美女在线| 99麻豆久久久国产精品免费优播| 亚洲va韩国va欧美va精品| 国产精品免费久久| 国产午夜亚洲精品不卡| 久久亚洲春色中文字幕久久久| 欧美精品视频www在线观看| 91免费观看在线| 色拍拍在线精品视频8848| 波多野结衣在线一区| 成人h动漫精品一区二区| 国产精品一区二区91| 国产成人夜色高潮福利影视| 韩国成人精品a∨在线观看| 麻豆久久久久久| 另类人妖一区二区av| 国产精品亚洲а∨天堂免在线| 丝袜脚交一区二区| 久久精品噜噜噜成人88aⅴ| 紧缚奴在线一区二区三区| 不卡在线观看av| 欧美日韩国产a| 久久久国际精品| 一区二区三区自拍| 精品一二线国产| 免费成人在线观看| 麻豆高清免费国产一区| av不卡在线观看| 欧美一二三在线| 一区二区三区高清在线| 韩国成人精品a∨在线观看| 一道本成人在线| 26uuu久久综合| 久久er99热精品一区二区| 色天天综合色天天久久| 精品少妇一区二区三区| 亚洲福利视频一区| 本田岬高潮一区二区三区| 精品国免费一区二区三区| 亚洲一区欧美一区| 97久久超碰精品国产| 久久精品在线免费观看| 美女www一区二区| 欧美日韩高清在线| 亚洲国产va精品久久久不卡综合| 国产成人免费视频网站| 久久免费的精品国产v∧| 青青草原综合久久大伊人精品优势 | 蜜桃av噜噜一区| 欧美猛男男办公室激情| 亚洲一区二区精品3399| 欧美性受xxxx黑人xyx| 亚洲一区二区三区在线播放 | 国产色一区二区| 北岛玲一区二区三区四区| 国产精品国产自产拍在线| 91蜜桃网址入口| 日韩高清不卡一区二区| 日韩午夜激情电影| 国产超碰在线一区|