成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

pytorch固定BN層參數(shù)的操作

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

背景:

基于PyTorch的模型,想固定主分支參數(shù),只訓(xùn)練子分支,結(jié)果發(fā)現(xiàn)在不同epoch相同的測試數(shù)據(jù)經(jīng)過主分支輸出的結(jié)果不同。

原因:

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

解決方法:

將需要固定的BN層狀態(tài)設(shè)置為eval。

問題示例:

環(huán)境: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, 假設(shè)每個epoch只迭代一次
        net.train()
        pre = net(train_data)
        # 計算損失和參數(shù)更新等
        # ....

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

運行結(jié)果:

-------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)已經(jīng)將網(wǎng)絡(luò)中的各參數(shù)設(shè)置成了不需要梯度更新的狀態(tài),但是同樣的測試數(shù)據(jù)test_data在不同epoch中前向之后出現(xiàn)了不同的結(jié)果。

調(diào)用print_net_state_dict可以看到BN層中的參數(shù)running_mean和running_var并沒在可優(yōu)化參數(shù)net.parameters中

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

但在training pahse的前向過程中,這兩個參數(shù)被更新了。導(dǎo)致整個網(wǎng)絡(luò)在freeze的情況下,同樣的測試數(shù)據(jù)出現(xiàn)了不同的結(jié)果

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層顯式設(shè)置eval狀態(tài):

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, 假設(shè)每個epoch只迭代一次
        net.train()
        net.bn1.eval()
        net.bn2.eval()
        pre = net(train_data)
        # 計算損失和參數(shù)更新等
        # ....

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

可以看到結(jié)果正常了:

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層參數(shù)詳解及應(yīng)用(1,2,3)(1,2)?

BN層參數(shù)詳解(1,2)

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

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

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

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

應(yīng)用技巧:(1,2)

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

問題:參數(shù)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,累積到一定次數(shù)再清0,再更新權(quán)重:

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:
        #用累積的梯度更新權(quán)重
        optimizer.step()
        #清空梯度
        optimizer.zero_grad()

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

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

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

您可能感興趣的文章:
  • pytorch 如何自定義卷積核權(quán)值參數(shù)
  • pytorch交叉熵損失函數(shù)的weight參數(shù)的使用
  • Pytorch 統(tǒng)計模型參數(shù)量的操作 param.numel()
  • pytorch 一行代碼查看網(wǎng)絡(luò)參數(shù)總量的實現(xiàn)
  • pytorch查看網(wǎng)絡(luò)參數(shù)顯存占用量等操作
  • pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作
  • pytorch LayerNorm參數(shù)的用法及計算過程

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《pytorch固定BN層參數(shù)的操作》,本文關(guān)鍵詞  pytorch,固定,層,參數(shù),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pytorch固定BN層參數(shù)的操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于pytorch固定BN層參數(shù)的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲欧美天堂网| 国产精品日韩在线观看| 九色porny视频在线观看| 欧美香蕉视频| 国产亚洲精品激情久久| 中国色在线日|韩| 日本jizz中国| aaaaaa亚洲| 中文字幕在线字幕中文| 日韩高清不卡一区二区三区| 香蕉97视频观看在线观看| wwwav在线播放| 中文字幕精品无码一区二区| 中文字幕资源网在线观看免费| 国产精品久久久久7777按摩| 9191精品国产综合久久久久久| 天天操天天操天天操| 青娱乐国产精品| 97aⅴ精品视频一二三区| 99热这里都是精品| 国产第一页在线| 欧美日韩电影在线播放| 日韩欧美一区二区三区久久| 日韩免费啪啪| 日本视频中文字幕| av中文在线播放| 一级特黄aaa大片在线观看| 国产精品久久久久久无人区| 色乱码一区二区三区在线| 精品少妇3p| 亚洲天堂偷拍| 电影久久久久久| 久久久99久久精品女同性| 伊人久久在线观看| 亚洲老板91色精品久久| 国产美女主播视频一区| 国产高清视频色在线www| www免费网站在线观看| 秋霞影院午夜丰满少妇在线视频| 国产精品午夜剧场| 久久久精品人妻无码专区| 三年片免费观看大全| 91久久久久久白丝白浆欲热蜜臀| 国精品日韩欧美一区二区三区| 中文在线综合| 中文字幕精品在线播放| 亚洲一区二区三区国产| 免费自拍视频| 成人片免费看| 欧美日韩小视频| 欧美日韩在线不卡视频| 天天插天天射| 伦av综合一区| 99精品免费| 久久久久久久久福利| 精品国产精品三级精品av网址| 欧美精品久久久久久久久久丰满| 欧美日本免费一区二区三区| 欧美性猛交xxxx乱大交3| 成年人黄色大片在线| 亚洲天堂网站在线观看视频| 国产精品三区在线观看| 欧美aaaxxxx做受视频| 91极品身材尤物theporn| 99www免费人成精品| 97精品伊人久久久大香线蕉| 国产精品久久久久久免费免熟| 欧美a在线播放| 天天揉久久久久亚洲精品| 99高清免费国产自产拍| 亚洲欧美国产高清va在线播| 免费在线不卡视频| 免费观看成年在线视频网站| 亚洲www啪成人一区二区麻豆| 91精品国产91综合久久蜜臀| 91麻豆精品成人一区二区| 91九色国产ts另类人妖| 午夜久久久久久久久久一区二区| 成人综合在线网站| 热99这里只有精品| av小说在线| 1769国内精品视频在线播放| 欧美高清视频手机在在线| 老熟妇高潮一区二区高清视频| 51精品在线观看| 香蕉av777xxx色综合一区| 淫片在线观看| 日韩动漫一区| 久久影院午夜片一区| 免费在线黄色av| 国产女女做受ⅹxx高潮| 亚洲伦在线观看| 日韩电影精品| 天天干天天操天天操| 成人羞羞动漫| 9久草视频在线视频精品| 一区二区三区少妇| 亚洲在线免费视频| 美女久久久久久久久久久| 蜜臀av午夜精品久久| 国产精选在线观看91| 免费在线观看污视频| 亚洲精品久久久久久久蜜桃臀| 欧美一区二区女人| 亚洲精品色图| 伊人在我在线看导航| 亚洲精品成人久久电影| 黑人中文字幕一区二区三区| 亚洲经典一区二区三区| 国产一区二区在线观看免费播放| 久草中文在线观看| 一区二区三区在线观看av| 国产伦精品一区二区三| 精品国产视频在线观看| 免费视频拗女稀缺一区二区| 亚洲免费精品视频| 国产一二区在线观看| 欧美日韩一级二级三级| 在线视频日韩一区| 国产aⅴ激情无码久久久无码| 超碰免费97在线观看| 欧美制服丝袜第一页| 美女伦理水蜜桃4| 无码精品在线观看| 91在线中文| 精品国产一区二区三区四区四| 国产精品69毛片高清亚洲| 草草地址线路①屁屁影院成人| 欧美巨乳在线观看| 免费黄色在线播放| 欧美日韩亚洲综合一区二区三区| 自拍av在线| jizz18欧美18| 美女18一级毛片一品久道久久综合| 国产网站在线播放| 亚洲综合网在线观看| 中文国产成人精品| 成全电影大全在线观看| 国产福利电影在线播放| 毛茸茸多毛bbb毛多视频| 国产成人精品无码片区在线| 亚洲成人久久影院| 综合日韩av| 三级精品视频久久久久| 中文字幕区一区二区三| 国产一区二区三区中文字幕| 国产人与zoxxxx另类91| 亚洲毛片在线播放| 久久www视频| 麻豆网站在线免费观看| 成人国产免费电影| 97成人在线免费视频| 午夜精彩国产免费不卡不顿大片| 国模私拍视频| 国产精品久久久久久超碰| 欧美下载看逼逼| 91综合久久爱com| 国产精品国产三级国产专播品爱网| 国产亚洲一区二区三区啪| 日韩在线观看高清| 日本激情五月| 999免费视频| free欧美性| 国产女同性恋一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美最猛性xxxx| 午夜精品久久久久久久四虎美女版| 日韩精品国产一区二区| 一区二区三区高清不卡| 国产成人97精品免费看片| 欧美激情久久久久久久久久久| 国产写真视频在线观看| 国产午夜麻豆影院在线观看| 中文字幕无人区二| 欧美暴力喷水在线| 亚洲AV无码国产精品| 日韩三级av在线播放| 在线观看91久久久久久| 亚洲欧美日韩国产一区| 久久久91精品国产一区不卡| 人成免费电影一二三区在线观看| 亚洲狼人综合网| 国产91aaa| 精品一区二区三区免费视频| 久久久久久久一区二区| 精品在线网站观看| 香蕉视频成人在线观看| 亚洲三级影院| 国产日韩av网站| 日本一二三区在线观看| 人妻在线日韩免费视频| 久久久久亚洲AV成人无在| 国产91在线视频| 国产主播性色av福利精品一区| 68精品久久久久久欧美| 欧美一级二级三级九九九| 永久免费观看片现看| 国产高清一区视频| 亚洲自拍在线观看| 黄色的毛片免费| 国产精品自产拍在线观看中文| 国产精品福利无圣光在线一区| 成年网站在线观看| 欧美挤奶吃奶水xxxxx| 又大又黄又粗| 久久青草国产手机看片福利盒子| 成人黄页在线观看| 欧美富婆性猛交| 69堂视频在线观看国产| 免费观看一二区视频网站| 青草久久伊人| 亚洲国产精品一区二区尤物区| 色婷婷一区二区三区av免费看| 亚洲在线免费观看| 五月天久久综合网| 成人性视频免费网站| 日韩电影中文 亚洲精品乱码| 国语自产精品视频在线看一大j8| 精品久久久久久综合日本| 国产视频在线视频| 俺来俺也去www色在线观看| 图片区亚洲欧美小说区| 久久国产精品网| 亚洲久久视频| 国产在线精品91| 国产精品国产自产拍高清av水多| 女人裸体免费网站| 久久久精品人妻一区二区三区四| 日韩成人免费在线观看| 国产欧美日韩精品一区| 成人亚洲综合天堂| 成人免费在线看片| dj大片免费在线观看| 欧美一区二区大片| 欧美午夜免费电影| 亚洲品质自拍视频| 欧美精品三级在线| 蜜桃在线一区二区三区精品| 国产精品系列在线| 国产探花在线免费观看| 亚洲深夜福利在线观看| 欧美黄色成人| 红桃视频一区二区三区免费| 九色福利视频| 国产三级精品网站| 欧美另类久久久品| 色资源二区在线视频| 日韩大胆人体| www.天堂乱色| 偷偷色噜狠狠狠狠的777米奇| 久久精品视频观看| 亚洲人亚洲人成电影网站色| 欧美女同在线观看| 国产欧美日韩免费观看| 精品国产一区二区三区久久狼5月| 在线观看亚洲色图| av小次郎在线| 亚洲成av人片在线观看| 在线视频超级| 国产v片免费观看| 四季av日韩精品一区| 91网址在线观看| 久久久久久国产精品久久| 国产7777777| 黄色激情视频在线观看| 黄色激情小视频| 欧美贵妇videos办公室| 国产aa视频| 亚洲精品激情视频| 91视频综合网| 国产精品视频精品| 国产在线一区视频| 久久99国产精品久久99果冻传媒| 国产一二精品视频| 国产精品成人久久久| 精品一区二区三区电影| 亚洲午夜未满十八勿入免费观看全集| 久久精品久久99精品久久| 老司机av网站| 9l亚洲国产成人精品一区二三| 女人被狂躁c到高潮| 91中文在线| 日韩av中文字幕一区二区| 99热99热| 亚洲色欧美另类| 色中色综合网| 亚洲午夜久久久久久久久电影网| 丁香激情综合五月| 九九久久免费视频| 久久另类ts人妖一区二区| 奇米色在线视频| 成人av综合在线| 国产精品久久久久三级| 国产伦乱精品| 国精产品一区一区三区有限在线| 国模私拍视频在线播放| 日韩三级中文字幕| 欧美成人午夜77777| 免费av一区| 色综合久久88色综合天天看泰| 羞羞视频网站在线免费观看| 成人一区二区三区中文字幕| 开心丁香婷婷深爱五月| 欧美特黄级在线| 国产精品美女www爽爽爽| 青青草视频成人| 久久99精品国产自在现线小黄鸭| 亚洲精品电影在线观看| av在线电影网| 青青草国产免费| 性感美女视频一二三| 91精品国产一区二区三区香蕉| 国产精品免费人成网站| 在线观看a网站| julia京香一区二区三区| 香蕉久久免费电影| 激情黄产视频在线免费观看| 亚洲最大av| 精品视频在线免费观看| 卡通动漫精品一区二区三区| 欧美综合精品| 国产成人免费观看网站| 亚洲一级理论片| 中文精品一区二区三区| 日韩成人精品| 亚洲一区二区天堂| 青娱乐国产在线视频| 亚洲成色www8888|