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

主頁 > 知識庫 > 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用法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本亚洲三级在线| 丁香网亚洲国际| 日本韩国一区二区| 久久国产夜色精品鲁鲁99| 中文字幕中文字幕一区| 日韩精品一区二区三区四区视频 | 欧美性欧美巨大黑白大战| 国产成人综合在线播放| 久久精品国产精品亚洲精品| 国产综合久久久久久久久久久久| 久久99久久99| av一区二区三区在线| 一本一道久久a久久精品| 欧美性色黄大片| 久久久久久久国产精品影院| 中文字幕在线不卡国产视频| 亚洲国产另类av| 日本va欧美va精品发布| 国产成人精品在线看| 国产精品12区| 678五月天丁香亚洲综合网| 欧美日韩中文一区| 成人一级片网址| 五月婷婷综合在线| 亚洲综合免费观看高清完整版| 精品国产三级a在线观看| 色8久久精品久久久久久蜜| 国产不卡在线一区| 国产麻豆精品视频| 国产在线看一区| 精品一区二区三区免费毛片爱 | 国产精品久久国产精麻豆99网站 | 中文一区在线播放| 亚洲精品欧美激情| 日韩手机在线导航| 中文字幕欧美区| 水野朝阳av一区二区三区| 日韩精品乱码免费| 麻豆精品一区二区av白丝在线| 国产成a人无v码亚洲福利| 91精品国产色综合久久ai换脸 | 另类中文字幕网| 在线免费不卡视频| 久久久.com| 久久99精品国产91久久来源| 日本韩国一区二区三区视频| 国产欧美日韩在线看| 自拍av一区二区三区| 国产成人免费av在线| 亚洲精品一区二区三区影院| 亚洲视频狠狠干| 99久久精品久久久久久清纯| 国产精品免费av| 久久综合综合久久综合| 日韩精品在线看片z| 国产精品一区免费在线观看| 欧美日韩视频第一区| 亚洲一区二区视频| 欧美二区在线观看| 亚洲精品视频自拍| 欧美一区二区久久| 蜜桃视频一区二区三区在线观看 | 国产欧美精品一区二区三区四区| 琪琪久久久久日韩精品| 久久久精品免费网站| 波多野结衣一区二区三区 | 成人精品亚洲人成在线| 成人欧美一区二区三区小说| 99久久er热在这里只有精品15| 亚洲六月丁香色婷婷综合久久 | 亚洲精品一区二区三区四区高清| 蜜臀国产一区二区三区在线播放| 欧美α欧美αv大片| 日韩精品色哟哟| 欧美激情一区二区三区| 欧美二区乱c少妇| 成人免费av资源| 精品国产凹凸成av人网站| 不卡一区二区在线| 精彩视频一区二区三区| 国产精品不卡一区二区三区| 欧美精品一二三| 在线观看日产精品| 成人精品在线视频观看| 国产呦精品一区二区三区网站| 成人免费小视频| 欧美成人午夜电影| 91精品国产综合久久福利| 高清成人免费视频| 美女精品一区二区| 免费成人av资源网| 亚洲一区二区四区蜜桃| 一区二区三区加勒比av| 国产三级欧美三级日产三级99| 777亚洲妇女| 精品欧美一区二区三区精品久久| 国产精品18久久久久久vr| 首页国产欧美久久| 美腿丝袜亚洲一区| 国产精一品亚洲二区在线视频| 国产福利一区在线| 久久国产精品一区二区| 国产成人免费视频网站高清观看视频 | 国产精品久线观看视频| 亚洲欧美日韩国产一区二区三区 | 亚洲激情五月婷婷| 亚洲成在人线在线播放| 久久精品噜噜噜成人88aⅴ| 国产乱码一区二区三区| 岛国精品在线播放| 欧美日韩不卡视频| 青青草97国产精品免费观看无弹窗版| 国产真实精品久久二三区| 不卡影院免费观看| 日韩精品中文字幕在线一区| 国产精品久久夜| 国产酒店精品激情| 欧美日韩一级二级| 亚洲欧美日韩小说| 成人午夜激情视频| 欧美精品久久久久久久多人混战 | 日韩欧美电影在线| 亚洲五月六月丁香激情| 久久久久99精品国产片| 亚洲精品免费一二三区| 国产成人免费在线观看不卡| 欧美日韩国产综合一区二区 | 国产一二精品视频| 日韩一区二区精品在线观看| 看片的网站亚洲| 国产精品视频在线看| 99精品久久免费看蜜臀剧情介绍| 亚洲美女少妇撒尿| 精品国产一区二区三区av性色| 国产精品亚洲一区二区三区妖精 | 国产成人av影院| 一区二区国产盗摄色噜噜| 日韩欧美亚洲另类制服综合在线| 精品一区二区影视| 洋洋av久久久久久久一区| 欧美伦理视频网站| 91视频在线看| 国产精品一区一区| 日本中文一区二区三区| 亚洲黄色性网站| 中文字幕精品在线不卡| 91精品国产综合久久香蕉麻豆| 国产成人午夜电影网| 久久精品国产**网站演员| 一区二区三区欧美亚洲| 国产日韩v精品一区二区| 欧美乱妇15p| 欧美亚州韩日在线看免费版国语版| 日韩高清不卡一区二区| 悠悠色在线精品| 一区二区三区在线免费播放| 亚洲日本在线a| 亚洲日本中文字幕区| 国产精品卡一卡二卡三| 国产精品国产三级国产aⅴ无密码| 精品少妇一区二区三区日产乱码 | 久久免费视频色| 国产午夜精品一区二区| 欧美电影免费观看高清完整版在 | 欧美年轻男男videosbes| 欧美三级电影在线观看| 欧美日本在线观看| 欧美一区二区精品| 欧美成人女星排名| 中文字幕在线一区免费| 一区二区三区日韩精品| 亚洲国产日韩av| 日韩av成人高清| 国产成人免费视频 | 欧美日韩高清影院| 日韩精品一区二区三区中文不卡| 日韩欧美黄色影院| 国产精品国产三级国产| 亚洲午夜私人影院| 国产精品系列在线播放| 色综合久久久久综合体| 久久色中文字幕| 午夜视频在线观看一区| 国产一区二区按摩在线观看| 在线精品视频免费播放| 久久在线观看免费| 日本成人在线电影网| 成人做爰69片免费看网站| 欧美精品v国产精品v日韩精品| 久久久美女毛片| 狠狠色丁香婷综合久久| 在线观看日韩一区| 亚洲欧洲99久久| 波多野结衣中文一区| 久久亚洲一区二区三区明星换脸 | 午夜精品一区二区三区三上悠亚| 日本一区二区免费在线观看视频 | 色婷婷综合久色| 成人免费毛片嘿嘿连载视频| 国产精品夜夜嗨|