午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > pytorch固定BN層參數的操作

pytorch固定BN層參數的操作

熱門標簽:電銷機器人的風險 開封語音外呼系統代理商 地圖標注線上如何操作 河北防封卡電銷卡 400電話辦理哪種 開封自動外呼系統怎么收費 天津電話機器人公司 手機網頁嵌入地圖標注位置 應電話機器人打電話違法嗎

背景:

基于PyTorch的模型,想固定主分支參數,只訓練子分支,結果發現在不同epoch相同的測試數據經過主分支輸出的結果不同。

原因:

未固定主分支BN層中的running_mean和running_var。

解決方法:

將需要固定的BN層狀態設置為eval。

問題示例:

環境:torch:1.7.0

# -*- coding:utf-8 -*-
import torch
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.bn1 = nn.BatchNorm2d(6)
        self.conv2 = nn.Conv2d(6, 16, 3)
        self.bn2 = nn.BatchNorm2d(16)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 from image dimension
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 5)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.bn1(self.conv1(x))), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.bn2(self.conv2(x))), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

def print_parameter_grad_info(net):
    print('-------parameters requires grad info--------')
    for name, p in net.named_parameters():
        print(f'{name}:\t{p.requires_grad}')

def print_net_state_dict(net):
    for key, v in net.state_dict().items():
        print(f'{key}')

if __name__ == "__main__":
    net = Net()

    print_parameter_grad_info(net)
    net.requires_grad_(False)
    print_parameter_grad_info(net)

    torch.random.manual_seed(5)
    test_data = torch.rand(1, 1, 32, 32)
    train_data = torch.rand(5, 1, 32, 32)

    # print(test_data)
    # print(train_data[0, ...])
    for epoch in range(2):
        # training phase, 假設每個epoch只迭代一次
        net.train()
        pre = net(train_data)
        # 計算損失和參數更新等
        # ....

        # test phase
        net.eval()
        x = net(test_data)
        print(f'epoch:{epoch}', x)

運行結果:

-------parameters requires grad info--------
conv1.weight: True
conv1.bias: True
bn1.weight: True
bn1.bias: True
conv2.weight: True
conv2.bias: True
bn2.weight: True
bn2.bias: True
fc1.weight: True
fc1.bias: True
fc2.weight: True
fc2.bias: True
fc3.weight: True
fc3.bias: True
-------parameters requires grad info--------
conv1.weight: False
conv1.bias: False
bn1.weight: False
bn1.bias: False
conv2.weight: False
conv2.bias: False
bn2.weight: False
bn2.bias: False
fc1.weight: False
fc1.bias: False
fc2.weight: False
fc2.bias: False
fc3.weight: False
fc3.bias: False
epoch:0 tensor([[-0.0755, 0.1138, 0.0966, 0.0564, -0.0224]])
epoch:1 tensor([[-0.0763, 0.1113, 0.0970, 0.0574, -0.0235]])

可以看到:

net.requires_grad_(False)已經將網絡中的各參數設置成了不需要梯度更新的狀態,但是同樣的測試數據test_data在不同epoch中前向之后出現了不同的結果。

調用print_net_state_dict可以看到BN層中的參數running_mean和running_var并沒在可優化參數net.parameters中

bn1.weight
bn1.bias
bn1.running_mean
bn1.running_var
bn1.num_batches_tracked

但在training pahse的前向過程中,這兩個參數被更新了。導致整個網絡在freeze的情況下,同樣的測試數據出現了不同的結果

Also by default, during training this layer keeps running estimates of its computed mean and variance, which are then used for normalization during evaluation. The running estimates are kept with a defaultmomentumof 0.1. source

因此在training phase時對BN層顯式設置eval狀態:

if __name__ == "__main__":
    net = Net()
    net.requires_grad_(False)

    torch.random.manual_seed(5)
    test_data = torch.rand(1, 1, 32, 32)
    train_data = torch.rand(5, 1, 32, 32)

    # print(test_data)
    # print(train_data[0, ...])
    for epoch in range(2):
        # training phase, 假設每個epoch只迭代一次
        net.train()
        net.bn1.eval()
        net.bn2.eval()
        pre = net(train_data)
        # 計算損失和參數更新等
        # ....

        # test phase
        net.eval()
        x = net(test_data)
        print(f'epoch:{epoch}', x)

可以看到結果正常了:

epoch:0 tensor([[ 0.0944, -0.0372, 0.0059, -0.0625, -0.0048]])
epoch:1 tensor([[ 0.0944, -0.0372, 0.0059, -0.0625, -0.0048]])

補充:pytorch---之BN層參數詳解及應用(1,2,3)(1,2)?

BN層參數詳解(1,2)

一般來說pytorch中的模型都是繼承nn.Module類的,都有一個屬性trainning指定是否是訓練狀態,訓練狀態與否將會影響到某些層的參數是否是固定的,比如BN層(對于BN層測試的均值和方差是通過統計訓練的時候所有的batch的均值和方差的平均值)或者Dropout層(對于Dropout層在測試的時候所有神經元都是激活的)。通常用model.train()指定當前模型model為訓練狀態,model.eval()指定當前模型為測試狀態。

同時,BN的API中有幾個參數需要比較關心的,一個是affine指定是否需要仿射,還有個是track_running_stats指定是否跟蹤當前batch的統計特性。容易出現問題也正好是這三個參數:trainning,affine,track_running_stats。

其中的affine指定是否需要仿射,也就是是否需要上面算式的第四個,如果affine=False則γ=1,β=0 \gamma=1,\beta=0γ=1,β=0,并且不能學習被更新。一般都會設置成affine=True。(這里是一個可學習參數)

trainning和track_running_stats,track_running_stats=True表示跟蹤整個訓練過程中的batch的統計特性,得到方差和均值,而不只是僅僅依賴與當前輸入的batch的統計特性(意思就是說新的batch依賴于之前的batch的均值和方差這里使用momentum參數,參考了指數移動平均的算法EMA)。相反的,如果track_running_stats=False那么就只是計算當前輸入的batch的統計特性中的均值和方差了。當在推理階段的時候,如果track_running_stats=False,此時如果batch_size比較小,那么其統計特性就會和全局統計特性有著較大偏差,可能導致糟糕的效果。

應用技巧:(1,2)

通常pytorch都會用到optimizer.zero_grad() 來清空以前的batch所累加的梯度,因為pytorch中Variable計算的梯度會進行累計,所以每一個batch都要重新清空一次梯度,原始的做法是下面這樣的:

問題:參數non_blocking,以及pytorch的整體框架??

代碼(1)

for index,data,target in enumerate(dataloader):
    data = data.cuda(non_blocking=True)
    target = torch.from_numpy(np.array(target)).float().cuda(non_blocking = Trye)
    output = model(data)
    loss = criterion(output,target)
    
    #清空梯度
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

而這里為了模仿minibacth,我們每次batch不清0,累積到一定次數再清0,再更新權重:

for index, data, target in enumerate(dataloader):
    #如果不是Tensor,一般要用到torch.from_numpy()
    data = data.cuda(non_blocking = True)
    target = torch.from_numpy(np.array(target)).float().cuda(non_blocking = True)
    output = model(data)
    loss = criterion(data, target)
    loss.backward()
    if index%accumulation == 0:
        #用累積的梯度更新權重
        optimizer.step()
        #清空梯度
        optimizer.zero_grad()

雖然這里的梯度是相當于原來的accumulation倍,但是實際在前向傳播的過程中,對于BN幾乎沒有影響,因為前向的BN還是只是一個batch的均值和方差,這個時候可以用pytorch中BN的momentum參數,默認是0.1,BN參數如下,就是指數移動平均

x_new_running = (1 - momentum) * x_running + momentum * x_new_observed. momentum

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

您可能感興趣的文章:
  • pytorch 如何自定義卷積核權值參數
  • pytorch交叉熵損失函數的weight參數的使用
  • Pytorch 統計模型參數量的操作 param.numel()
  • pytorch 一行代碼查看網絡參數總量的實現
  • pytorch查看網絡參數顯存占用量等操作
  • pytorch 優化器(optim)不同參數組,不同學習率設置的操作
  • pytorch LayerNorm參數的用法及計算過程

標簽:駐馬店 常州 宿遷 六盤水 江蘇 成都 山東 蘭州

巨人網絡通訊聲明:本文標題《pytorch固定BN層參數的操作》,本文關鍵詞  pytorch,固定,層,參數,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch固定BN層參數的操作》相關的同類信息!
  • 本頁收集關于pytorch固定BN層參數的操作的相關信息資訊供網民參考!
  • 推薦文章
    欧美一二三区视频| 亚洲一区二区三区在线免费观看| 麻豆视频在线免费看| 欧美一级特黄aaaaaa在线看片| 成人444kkkk在线观看| 一本到不卡精品视频在线观看| 国产精品综合一区二区| 青青草国产精品视频| 97国产超碰| 欧美精品做受xxx性少妇| 欧美日本一区二区| 一区二区三区不卡视频| 波多野结衣精品在线| 污视频在线免费| 中文字幕视频网站| 国产又粗又硬又长又爽| 国产精品无码专区| 国产成人美女视频| 福利视频一二区| 一本色道久久综合亚洲二区三区| 99re在线观看| 国产精品黄视频| 欧美风情在线观看| 亚洲欧洲偷拍精品| 91精品一区二区三区在线观看| 一区二区三区欧美日韩| 国产视频在线观看一区二区三区| 国产综合久久久久影院| 久久精品男女| av官网在线观看| 伊人精品在线视频| 香蕉影院在线观看| 国产黄色片免费看| 久久久久久久久久网站| 天堂а√在线中文在线鲁大师| 男人网站在线观看| 久久久久亚洲av片无码v| 好男人www社区| 日日摸天天爽天天爽视频| 少妇人妻在线视频| mm131美女视频| 26uuu亚洲国产精品| 天天做天天爱天天高潮| 9l视频白拍9色9l视频| 日韩一区二区三区视频在线| 久久久天天操| 日韩欧美激情一区| 久久久国际精品| 亚洲成人av网址| 久久亚洲国产精品日日av夜夜| 亚洲久本草在线中文字幕| 国产丰满美女做爰| wwwww在线观看| 不卡av电影在线观看| 免费观看国产视频在线| 国模精品视频一区二区三区| 91在线播放网址| 国产精品美女主播| 欧美疯狂xxxx大交乱88av| 91沈先生在线观看| 欧美亚洲国产怡红院影院| 波多野结衣一二区| 国产网站无遮挡| 成人免费网站在线看| 欧美视频在线视频| 成人亚洲视频在线观看| 在线观看成人av电影| 国产亚洲色婷婷久久99精品91| 精品人妻一区二区三区日产| 91偷拍精品一区二区三区| 国产精品视频在线观看| 99久久久无码国产精品| 国产黄色美女视频| 中文字幕在线不卡视频| 国产福利资源在线| 九九视频精品免费| 第一区免费在线观看| 日本免费色视频| 一级国产黄色片| 菠萝菠萝蜜网站| 韩国视频一区二区三区| 霍思燕三级露全乳照| 国产成人高潮免费观看精品| 色999日韩国产欧美一区二区| 日本免费福利视频| 国产精品第100页| 免费在线观看你懂的| 美女mm1313爽爽久久久蜜臀| 国产成人免费网站| 亚洲精品资源美女情侣酒店| 国产欧美一区二区在线播放| 国产精品区一区二区三含羞草| 色激情天天射综合网| 国产精品欧美在线| 女女调教被c哭捆绑喷水百合| 青青草免费观看视频| 国产天堂第一区| 蜜桃久久久久久| 国产精品看片你懂得| 国产精品免费无遮挡| 热这里只有精品| av日韩在线网站| 91免费在线观看网站| 免费在线观看av网址| 亚洲色图27p| 久久影视中文字幕| 91在线丨porny丨国产| 欧美寡妇偷汉性猛交| 日本午夜人人精品| 精品福利在线看| 国产99久久久欧美黑人 | 中文字幕欧美日韩一区| 26uuu久久综合| 国产高清自拍视频| 亚洲高清在线精品| 亚洲精品中文字幕有码专区| 亚洲最大免费| 一区二区国产欧美| av一区二区三区免费| 欧美大喷水吹潮合集在线观看| 精品制服美女久久| 欧美日本在线播放| 亚洲精品v欧美精品v日韩精品| 欧美最近摘花xxxx摘花| 中国老女人av| 亚洲精品视频三区| 欧美成人777| 图片区小说区国产精品视频| 日韩欧美高清视频| 久久精品国产精品亚洲色婷婷| 黄色三级生活片| 99精品视频在线观看| 国产午夜福利100集发布| 亚洲男人的天堂一区二区| 麻豆av一区二区三区久久| 国产人妻一区二区| 菠萝菠萝蜜网站| 国产女人水真多18毛片18精品视频 | 综合欧美国产视频二区| 国产精品成人一区二区| 免费成年人视频在线观看| 亚洲色图13p| www欧美日韩| 免费久久99精品国产自| 中文字幕视频二区| 久久久国产一区二区| 亚洲欧美电影在线观看| 亚洲一区二区黄| 亚洲丁香婷深爱综合| 国内精品免费午夜毛片| 国内偷拍精品视频| 国产高清亚洲一区| 午夜精品在线视频| 国产手机在线观看| 欧美岛国在线观看| 国产精品久久无码| 搡老女人一区二区三区视频tv| 亚洲精品国产a| 中日韩av在线播放| 一区二区免费在线| 国产高清视频免费在线观看| 亚洲成人a级网| 成人手机电影网| 精品乱色一区二区中文字幕| 波多野结衣在线网址| 欧美一级一区二区| 国产suv精品一区二区三区88区| 欧美另类高清videos的特点| 久久6免费高清热精品| 欧美午夜欧美| 日本一区二区三不卡| 免费黄色福利视频| 久久午夜av| 久久久精品黄色| 久草免费资源站| 国产精品卡一卡二卡三| 欧美连裤袜在线视频| 色婷婷精品久久二区二区蜜臂av| 精品一区在线视频| 欧美激情一区二区三级高清视频| а中文在线天堂| 亚洲精品蜜桃久久久久久| 青青草97国产精品免费观看无弹窗版 | 欧美性受极品xxxx喷水| 国产精品18p| 懂色av噜噜一区二区三区av| 国产成人精品在线| 刘亦菲久久免费一区二区| 伊人亚洲综合网| 午夜国产精品一区| 国产欧美日本一区视频| 亚洲一区二区三区午夜| 国产高清免费观看| 亚洲精品国产视频| 奇米影视首页 狠狠色丁香婷婷久久综合 | 亚洲日本在线播放| 成人精品福利视频| 九一精品久久久| 成人高清视频在线观看| 精品视频一区二区三区四区| 国产一区二区视频在线| 扒开jk护士狂揉免费| 亚洲综合在线播放| 国产91精品久久久久久久网曝门| 亚洲视频在线观看视频| 肥臀熟女一区二区三区| 亚洲熟女少妇一区二区| 两根大肉大捧一进一出好爽视频| 福利视频一区二区三区| 影音先锋国产在线| 亚洲精品无人区| 国产精品免费久久久久| 精品爆乳一区二区三区无码av| 成人黄在线观看| 91激情在线视频| 中文字幕久久久久久久| 亚洲另类欧美自拍| 99久久久久久久| 97精品伊人久久久大香线蕉| 精品中文字幕一区二区小辣椒| 国产精品亚洲一区二区无码| 中文字幕色一区二区 | 国产伦一区二区| 国产三级三级看三级| 日韩中文字幕久久| 精品视频www| 精品日本一线二线三线不卡| 成年人网站免费在线观看| 国产女主播av| 亚洲激情视频网站| 免费观看久久久4p| 天天干天天曰天天操| 亚洲福利一区二区三区| 草逼视频免费看| 欧美成人午夜激情| 国产一区二区女| 国产成人无码精品亚洲| 欧美黄色高清视频| 国产又黄又爽免费视频| 91久久极品少妇xxxxⅹ软件 | 成人黄色av电影| 国产黑丝在线观看| 中文字幕视频在线免费观看| 无码精品视频一区二区三区| 中文字幕久久久久| 午夜福利视频一区二区| 日韩国产在线一| 六月丁香婷婷激情| 日韩精品久久一区二区三区| 丰满亚洲少妇av| 日本wwwxx| 亚洲爆乳无码专区| 爱情岛论坛亚洲入口| 欧美国产精品va在线观看| 久久亚洲精品伦理| 中国一级黄色录像| 欧美第一黄色网| 国产精品久久久久久亚洲调教| 91精品国产综合久久香蕉的用户体验 | 欧美亚洲一区二区在线| 久久免费激情视频| 国产黄色网址在线观看| 久久无码人妻一区二区三区| 一区二区精品免费视频| 日韩av中文字幕第一页| 五月天在线免费视频| 日韩在线三级| 久久精品人成| 亚洲第一页在线观看| 一本久久a久久精品vr综合| 亚洲91精品在线| 久久精品视频一| 极品尤物av久久免费看| 视频二区一区| 欧美国产日韩一二三区| 亚洲v日本v欧美v久久精品| av亚洲精华国产精华| 国产精一品亚洲二区在线视频| 人妻少妇一区二区三区| 97成人在线视频| 精品一区二区三区免费播放| 日韩成人精品在线观看| 国产精成人品免费观看| 欧美大片在线观看| 国产欧美日韩精品一区| 久久蜜桃av一区精品变态类天堂 | 91在线视频导航| 亚洲电影一二三区| 日本高清免费在线视频| 精品视频9999| 国内伊人久久久久久网站视频| 日韩三级电影网址| 亚洲精品美女免费| 成人动漫一区二区三区| 国产一区二区毛片| 琪琪一区二区三区| 2014亚洲天堂| 亚洲人人夜夜澡人人爽| 小明看看成人免费视频| 国精产品一区一区三区视频| 在线视频欧美一区| 蜜桃麻豆91| 久久久999视频| 一区二区精品免费| 国产精品美女久久久久av超清| 日本午夜在线亚洲.国产| 欧美aaaaa喷水| 一区二区成人精品| 欧美性高清videossexo| 国产一区二区日韩| 精品国产区一区| 亚洲午夜电影网| 日本va欧美va欧美va精品| 无码人妻av一区二区三区波多野| 日韩欧美一区二区视频在线播放| 日韩一区国产在线观看| 草草影院第一页| 欧美肥妇bbwbbw| 亚洲av无码国产精品麻豆天美| 女人被狂躁c到高潮| 日本一区二区三区免费视频| 欧美性生交大片| 久久蜜桃精品| 久久综合九色欧美综合狠狠| 亚洲视频在线一区| 久久亚洲国产精品一区二区| 亚洲人成小说网站色在线 | bt欧美亚洲午夜电影天堂| 精品久久人人做人人爽| 欧美激情免费视频| 色婷婷综合网站| aaa亚洲精品一二三区| 国产91精品在线播放| 丰满少妇高潮一区二区| 成人av网址在线观看| 亚洲第一福利视频| 久久亚洲高清| 人妻av无码一区二区三区 | 国产黄色免费视频| 国产成人av网站| 欧美一级视频精品观看| 久久久久久久久久婷婷| 日本精品一区二区三区在线播放视频 | 日本视频一区二区不卡| 伦伦影院午夜理论片| 激情欧美日韩一区二区| 婷婷六月综合亚洲| 欧美香蕉大胸在线视频观看 | 成人网在线视频| 成人午夜碰碰视频| 午夜老司机福利| 永久免费看片直接| 极品白嫩的小少妇| 日韩av中文字幕第一页| 久久99影院| 国产精品欧美一区二区| 欧美成人午夜剧场免费观看| 欧美成人一区二区三区| 欧美性xxxx18| 亚洲婷婷综合久久一本伊一区| 国产精品亚洲一区二区三区妖精| 97人妻人人澡人人爽人人精品 | 亚洲一区三区视频在线观看| 国产欧美一区二区三区在线看| 欧美成人亚洲成人| 亚洲欧美一区二区三区情侣bbw| 欧美三级电影在线观看| 日本熟妇一区二区三区| 欧美另类69xxxx| 大桥未久一区二区三区| 成人精品一区二区三区| 1769国产精品| 欧美成人免费一级人片100| 亚洲精品美女在线观看播放| 欧美日韩亚洲不卡| 色婷婷综合久久久久中文| 中文字幕中文字幕在线一区| 99re在线精品| 丁香婷婷综合色啪| 激情五月婷婷综合| 久久精品国产99国产精品| 天堂在线视频观看| 日韩亚洲欧美中文字幕| 深爱五月激情网| 日韩免费高清一区二区| 人妻精品久久久久中文字幕69| 91人人澡人人爽人人精品| 国产偷人视频免费| 国产日韩欧美一区二区三区四区| 国产免费一区视频观看免费 | 欧美日韩一二三| 欧美午夜激情视频| 欧美午夜无遮挡| 色88888久久久久久影院野外| 色美美综合视频| 欧美日韩国产综合一区二区| 欧美精品视频www在线观看| 成人免费黄色在线| 成人自拍视频在线观看| 成人午夜视频在线| 26uuu国产电影一区二区| 99久久精品一区二区| 91丨porny丨国产| 中文字幕乱码亚洲精品一区| 国产无人区一区二区三区| 中文字幕中文字幕一区二区| 亚洲国产成人高清精品| 色呦呦网站一区| 日韩一区二区麻豆国产| 亚洲性av网站|