成人性生交大片免费看视频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)民參考!
  • 推薦文章
    亚洲国产精品久久不卡毛片| 香蕉视频在线免费| 日韩一级精品| 欧美激情中文字幕| 久草av在线播放| 加勒比av在线播放| 欧美乱做爰xxxⅹ久久久| 无码少妇一区二区三区芒果| 欧美午夜三级| 亚洲日本精品一区| 在线视频亚洲专区| 久久综合成人精品亚洲另类欧美| 欧美日韩激情视频8区| 日韩亚洲不卡在线| 精品免费久久久| 一区二区精彩视频| 国产精品一区在线观看乱码| 一区二区三区精彩视频| 一本久道综合色婷婷五月| 精品毛片在线观看| 久久久久久久久久久久网站| 美女网站久久| 久久99久久99精品中文字幕| 精品一区二区三区中文字幕视频| 天天爽夜夜爽人人爽| 免费精品视频一区二区三区| 日本中文字幕高清视频| 一线天粉嫩在线播放| 五月天六月丁香| 日韩成人av电影| 国产1区二区| 精品国产中文字幕第一页| 日本中文字幕第一页| 国产视频www| 亚洲精品自在在线观看| 成人黄色一区二区| 在线免费观看视频| 成人动漫网站在线观看| 久久99国产精品麻豆| 日韩欧美在线一区二区三区| 精品欧美不卡一区二区在线观看| 在线观看视频日韩| 国产成人永久免费视频| 亚洲精品一区二区三区网址| 亚洲精品免费一区亚洲精品免费精品一区| 91黄在线观看| 美脚恋feet久草欧美| 国产精品久久久久久久7电影| av电影天堂一区二区在线| 久久一级免费视频| 美女扒开尿口让男人操亚洲视频网站| 国产精品主播一区二区| 5278欧美一区二区三区| 鲁丝一区二区三区免费| 亚洲特级毛片| 黄色网zhan| 三区精品视频观看| 日韩欧美在线电影| 国产高清一区日本| 综合国产精品| 奇米影视7777精品一区二区| 97久久人人超碰caoprom| 欧美日韩aaaaa| 成人免费小视频| 在线观看入口黄最新永久免费国产| 成人亚洲激情网| 国产精品免费一区二区三区四区| 久久亚洲私人国产精品va媚药| 九九九伊在人线综合| 日韩在线观看视频网站| 精品国产1区2区3区| 国产欧美在线看| 九九视频九九热| 成年网站在线看| 欧美一区国产在线| 国产精品普通话| 亚洲精品网址在线观看| 欧美视频在线观看网站| 久久艹免费视频| 久久免费视频播放| 一区在线播放视频| 鬼打鬼之黄金道士1992林正英| 国产乱码精品一区二区三区不卡| 精品一区在线看| 久久精品国产亚洲7777| 欧美熟妇交换久久久久久分类| 一级毛片在线看| 久久久久久自在自线| 国产精品va在线| 成人精品在线观看视频| 国产在线观看你懂的| 丝袜人妻一区二区三区| 水蜜桃精品av一区二区| 91在线视频播放| 男人插入女人视频| 午夜小视频免费| av超碰免费在线| av在线免费在线观看| 在线免费电影网| 国产精品亚洲成人| 成人观看高清在线观看免费| 成人在线黄色| 国产黄色片在线| 日韩视频在线观看免费| 午夜三级在线观看| 九九九久久久久久久| 国产精品videossex撒尿| 欧美一区二区色| 精品国产美女a久久9999| av地址在线观看| **欧美大码日韩| 精品999在线观看| 久久人妻一区二区| 亚洲a级在线观看| 日韩午夜视频在线| 亚洲成av人**亚洲成av**| 黄色片免费网址| h视频免费高清在线观看| 成人国产精品一区二区网站| 欧美激情第8页| 日韩av高清在线播放| 99久久夜色精品国产亚洲96| 国产网站免费在线观看| 日本黑人久久| 国产精品入口麻豆| 成人欧美一区二区三区白人| 亚洲高清成人影院| 香蕉污视频在线观看| 欧美人交a欧美精品| 亚洲激情自拍图| 1pondo在线播放免费| 99久久精品国产网站| 久久久噜噜噜久久中文字幕色伊伊| 国产亚洲人成a在线v网站| 日韩免费中文字幕| 国产精品视频一区二区三区| 中文字幕免费看| 香港经典三级在线| 在线天堂中文www官网| 看欧美日韩国产| 色噜噜狠狠色综合网| 麻豆av一区二区三区| 狠狠操狠狠色| 九九热精品视频在线| 国产1卡2卡三卡四卡网站| 18网站在线观看| 成人3d动漫一区二区三区91| 国产午夜精品一区在线观看| 亚洲国产日韩在线| 日韩欧美亚洲另类制服综合在线| 午夜精品福利电影| 福利在线视频网站| 国产精品自在线| 欧美日韩国产大片| 99精品在免费线偷拍| 欧美一区二区精品| 亚洲欧美清纯在线制服| 在线免费看视频| 国产盗摄——sm在线视频| 国产永久免费视频| 欧美国产高跟鞋裸体秀xxxhd| 亚洲第一狼人社区| 中文字幕第六页| 91亚色免费| 久久精品亚洲乱码伦伦中文| 羞羞影院欧美| 在线免费成人| av网站中文字幕| 欧美日韩中文字幕在线播放| 日本伊人精品一区二区三区介绍| 日韩综合在线观看| 婷婷综合福利| 国产在线精品一区在线观看麻豆| 内射后入在线观看一区| 国产精品亚洲一区二区三区在线观看| 在线免费看黄色片| 精精国产xxx在线视频app| 91精品国产色综合久久不卡98| 欧美精品久久久久久久小说| 黄色网址大全在线观看| 国内成人免费视频| 欧美日韩一区小说| 国产裸体永久免费无遮挡| 99久热这里只有精品视频免费观看| 麻豆视频在线看| 亚洲资源一区| 蜜臀av粉嫩av懂色av| 四虎成人精品一区二区免费网站| 日本少妇bbwbbw精品| 中文字幕av一区二区| 神马久久久久久久久久久| 国产成人免费视频一区| 天天操夜夜逼| 欧美裸体xxxx极品少妇| 91视频免费进入| 欧美日本韩国国产| 欧美精品一区在线播放| 国模无码一区二区三区| 一级片免费网址| 亚洲天堂小视频| 国产二级片在线| 国产偷国产偷亚洲高清97cao| www.一区二区.com| 色先锋资源久久综合5566| 精品国产网站在线观看| 貂蝉被到爽流白浆在线观看| 黄色av中文字幕| 国产精品一区二区久激情瑜伽| 狠狠入ady亚洲精品经典电影| 在线国产网址| 激情五月婷婷六月| 在线看三级电影| 91网站进入| 国外成人免费在线播放| 日韩久久一区二区| 欧美特级黄色录像| 亚洲欧美伊人| 久久亚洲黄色| 偷拍与自拍一区| 久久精品亚洲精品国产欧美| 国产aⅴ综合色| 网曝91综合精品门事件在线| 欧美日韩国产丝袜美女| 国产日韩在线亚洲字幕中文| 日本午夜精品一区二区| 欧美综合在线观看视频| 日韩精品久久| 日韩亚洲欧美中文高清在线| jizz免费一区二区三区| 欧美精品第一页在线播放| 亚洲第一页在线观看| 少妇太紧太爽又黄又硬又爽小说| 成人午夜又粗又硬又大| 俺去啦在线观看| 久久精品人妻一区二区三区| 国产精品欧美在线| 亚洲日韩成人| 国产精品青草久久久久福利99| 日韩成人在线一区| 婷婷av一区二区三区| 国产亚洲激情在线| yellow视频在线观看一区二区| a4yy在线播放免费观看视频| 国产黑丝在线视频| 色哟哟中文字幕| 久久久亚洲一区| 日韩尤物视频| 亚洲欧洲精品视频| 91麻豆文化传媒在线观看| 福利视频一区| 亚洲伊人第一页| 日韩中文在线电影| 深夜视频在线观看| 可以免费看毛片的网站| 日日噜噜噜夜夜爽亚洲精品| 天堂а√在线中文在线鲁大师| 欧美黄页在线免费观看| www.久色| 色视频一区二区| 日韩少妇内射免费播放| 久久久久久婷| 国产网站免费在线观看| 欧美日韩亚洲一区二区三区四区| 小草在线视频免费播放| 欧美日韩国产精品一区| 国产一区在线观看麻豆| 青草av.久久免费一区| 精品国产区一区| 91久久夜色精品国产网站| 四虎国产精品免费观看| 国产亚洲成av人片在线观黄桃| 亚洲四虎av| 国产精品igao视频| 少妇激情综合网| 特级西西444www大精品视频免费看| 色综合久久中文综合久久97| 亚洲精品免费在线观看视频| 国产人妻精品一区二区三| 成人图片小说| 亚洲精品1区| 亚洲青青青在线视频| 国产激情久久久久| 在线观看一区欧美| 欧美一区二区三区久久精品茉莉花| 九九久久久久99精品| 亚洲天堂中文字幕在线| 国产男女无套免费网站| 久久精品国产99国产| ww久久中文字幕| 欧美91福利在线观看| 在线精品播放av| 精品91自产拍在线观看一区| 69av在线播放| 欧美一区二区成人6969| www.啪啪.com| 精品久久久久久久人人人人传媒| 亚欧色一区w666天堂| 国产精品二区二区三区| 四虎影院中文字幕| 少妇大叫太大太粗太爽了a片小说| av电影在线免费| aa亚洲婷婷| 精品成人国产在线观看男人呻吟| 国产精品久久久久久久牛牛| 一女二男3p波多野结衣| 国产黄色大片网站| 91麻豆精品国产综合久久久| 在线播放国产区| 亚洲成人精品影院| 欧美啪啪免费视频| 国产综合色在线| 久久久一本精品99久久精品| 中文字幕一区二区三区四区在线视频| 国产丝袜视频在线观看| 99自拍视频在线| 国内爆初菊对白视频| 欧性猛交ⅹxxx乱大交| h网站免费观看| 东方aⅴ免费观看久久av| 日韩成人亚洲| 中文字幕超清在线免费观看| 三级视频网站在线| 国产日韩视频在线| 精品国产区在线| 在线精品国产亚洲| 日韩男人天堂| gai在线观看免费高清| 精品国产乱码久久久久久1区2区|