<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          pytorch提取參數(shù)及自定義初始化

          共 3395字,需瀏覽 7分鐘

           ·

          2022-04-18 14:33

          ↑ 點擊藍字?關注極市平臺

          作者丨李元芳@知乎(已授權(quán))
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/52297770
          編輯丨極市平臺

          極市導讀

          ?

          有時候提取出的層結(jié)構(gòu)并不夠,還需要對里面的參數(shù)進行初始化,那么如何提取出網(wǎng)絡的參數(shù)并對其初始化呢?本文對其進行簡單的介紹。?>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿

          首先 nn.Module 里面有兩個特別重要的關于參數(shù)的屬性,分別是 named_parameters()和 parameters()。named_parameters() 是給出網(wǎng)絡層的名字和參數(shù)的迭代器,parameters()會給出一個網(wǎng)絡的全部參數(shù)的選代器。

          import?os
          import?torch
          import?torch.nn?as?nn
          import?torch.optim?as?optim
          import?torch.backends.cudnn?as?cudnn
          import?torch.nn.init?as?init
          import?argparse
          import?torch.autograd.variable?as?variable

          class?SimpleCNN(nn.Module):
          ????def?__init__(self):
          ????????super(SimpleCNN,self).__init__()??#b,3,32,32
          ????????layer1=nn.Sequential()
          ????????layer1.add_module('conv1',nn.Conv2d(in_channels=3,out_channels=32,kernel_size=3,stride=1,padding=1))
          ????????#b,32,32,32
          ????????layer1.add_module('relu1',nn.ReLU(True))
          ????????layer1.add_module('pool1',nn.MaxPool2d(2,2))
          ????????#b,32,16,16
          ????????self.layer1=layer1
          ????????layer2=nn.Sequential()
          ????????layer1.add_module('conv2',nn.Conv2d(in_channels=32,out_channels=64,kernel_size=3,stride=1,padding=1))
          ????????#b,64,16,16
          ????????layer2.add_module('relu2',nn.ReLU(True))
          ????????layer2.add_module('pool2',nn.MaxPool2d(2,2))
          ????????#b,64,8,8
          ????????self.layer2=layer2

          ????????layer3=nn.Sequential()
          ????????layer3.add_module('conv3',?nn.Conv2d(in_channels=64,?out_channels=128,?kernel_size=3?,stride=1,?padding?=?1))?
          ????????#b,128,8,8
          ????????layer3.add_module('relu3',?nn.ReLU(True))
          ????????layer3.add_module('poo13',?nn.MaxPool2d(2,?2))#b,128,4,4
          ????????self.layer3=layer3

          ????????layer4?=nn.Sequential()
          ????????layer4.add_module('fc1',nn.Linear(in_features=2048,?out_features=512?))
          ????????layer4.add_module('fc_relu1',?nn.ReLU(True))
          ????????layer4.add_module('fc2?',?nn.Linear(in_features=512,?out_features=64?))
          ????????layer4.add_module('fc_relu2',?nn.ReLU(True))
          ????????layer4.add_module('fc3',?nn.Linear(64,?10))
          ????????self.layer4?=?layer4

          ????def?forward(self,x):
          ????????conv1=self.layer1(x)
          ????????conv2=self.layer2(conv1)
          ????????conv3=self.layer3(conv2)
          ????????fc_input=conv3.view(conv3.size(0),-1)
          ????????fc_output=self.layer4(fc_input)
          ????return?fc_output
          model=SimpleCNN()
          for?param?in?model.named_parameters():
          ????print(param[0])

          可以得到每一層參數(shù)的名字,輸出為

          如何對權(quán)重做初始化呢 ? 非常簡單,因為權(quán)重是一個 Variable ,所以只需要取出其中的 data 屬性,然后對它進行所需要的處理就可以了。

          for?m?in?model.modules():
          ????if?isinstance(m,nn.Conv2d):
          ????????init.normal(m.weight.data)?#通過正態(tài)分布填充張量
          ????????init.xavier_normal(m.weight.data)?
          #xavier均勻分布的方法來init,來自2010年的論文“Understanding?the?difficulty?of?training?deep?feedforward?neural?networks”
          ????????init.kaiming_normal(m.weight.data)?
          #來自2015年何凱明的論文“Delving?deep?into?rectifiers:?Surpassing?human-level?performance?on?ImageNet?classification”
          ????????m.bias.data.fill_(0)
          ????elif?isinstance(m,nn.Linear):
          ????????m.weight.data.normal_()

          通過上面的操作,對將卷積層中使用 PyTorch 里面提供的方法的權(quán)重進行初始化,這樣就能夠使用任意我們想使用的初始化,甚至我們可以自己定義初始化方法并對權(quán)重進行初始化 。

          更多初始化方法參考:https://pytorch-cn.readthedocs.io/zh/latest/package_references/nn_init/


          公眾號后臺回復“數(shù)據(jù)集”獲取30+深度學習數(shù)據(jù)集下載~

          △點擊卡片關注極市平臺,獲取最新CV干貨
          極市干貨
          數(shù)據(jù)集資源匯總:10個開源工業(yè)檢測數(shù)據(jù)集匯總21個深度學習開源數(shù)據(jù)集分類匯總
          算法trick目標檢測比賽中的tricks集錦從39個kaggle競賽中總結(jié)出來的圖像分割的Tips和Tricks
          技術(shù)綜述:一文弄懂各種loss function工業(yè)圖像異常檢測最新研究總結(jié)(2019-2020)


          #?CV技術(shù)社群邀請函?#

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart4)

          備注:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)


          即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~


          覺得有用麻煩給個在看啦~??
          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大吊操黑B | 亚洲中文字幕第一 | 男人天堂v在线 | 蜜桃91在线观看 | 婷婷丁香五月激情网 |