正則化DropPath/drop_path用法示例(Python實(shí)現(xiàn))
DropPath/drop_path 是一種正則化手段,其效果是將深度學(xué)習(xí)模型中的多分支結(jié)構(gòu)隨機(jī)”刪除“,python中實(shí)現(xiàn)如下所示:
def drop_path(x, drop_prob: float = 0., training: bool = False): if drop_prob == 0. or not training: return x keep_prob = 1 - drop_prob shape = (x.shape[0],) + (1,) * (x.ndim - 1) random_tensor = keep_prob + torch.rand(shape, dtype=x.dtype, device=x.device) random_tensor.floor_() # binarize output = x.div(keep_prob) * random_tensor return output class DropPath(nn.Module): def __init__(self, drop_prob=None): super(DropPath, self).__init__() self.drop_prob = drop_prob def forward(self, x): return drop_path(x, self.drop_prob, self.training)
調(diào)用如下:
self.drop_path = DropPath(drop_prob) if drop_prob > 0. else nn.Identity() x = x + self.drop_path(self.token_mixer(self.norm1(x))) x = x + self.drop_path(self.mlp(self.norm2(x)))
看起來似乎有點(diǎn)迷茫,這怎么就隨機(jī)刪除了分支呢
實(shí)驗(yàn)如下:
import torch drop_prob = 0.2 keep_prob = 1 - drop_prob x = torch.randn(4, 3, 2, 2) shape = (x.shape[0],) + (1,) * (x.ndim - 1) random_tensor = keep_prob + torch.rand(shape, dtype=x.dtype, device=x.device) random_tensor.floor_() output = x.div(keep_prob) * random_tensor
輸出:
x.size():[4,3,2,2]
x:
tensor([[[[ 1.3833, -0.3703],
[-0.4608, 0.6955]],
[[ 0.8306, 0.6882],
[ 2.2375, 1.6158]],
[[-0.7108, 1.0498],
[ 0.6783, 1.5673]]],[[[-0.0258, -1.7539],
[-2.0789, -0.9648]],
[[ 0.8598, 0.9351],
[-0.3405, 0.0070]],
[[ 0.3069, -1.5878],
[-1.1333, -0.5932]]],[[[ 1.0379, 0.6277],
[ 0.0153, -0.4764]],
[[ 1.0115, -0.0271],
[ 1.6610, -0.2410]],
[[ 0.0681, -2.0821],
[ 0.6137, 0.1157]]],[[[ 0.5350, -2.8424],
[ 0.6648, -1.6652]],
[[ 0.0122, 0.3389],
[-1.1071, -0.6179]],
[[-0.1843, -1.3026],
[-0.3247, 0.3710]]]])
random_tensor.size():[4, 1, 1, 1] random_tensor: tensor([[[[0.]]], [[[1.]]], [[[1.]]], [[[1.]]]])
output.size():[4,3,2,2] output: tensor([[[[ 0.0000, -0.0000], [-0.0000, 0.0000]], [[ 0.0000, 0.0000], [ 0.0000, 0.0000]], [[-0.0000, 0.0000], [ 0.0000, 0.0000]]], [[[-0.0322, -2.1924], [-2.5986, -1.2060]], [[ 1.0748, 1.1689], [-0.4256, 0.0088]], [[ 0.3836, -1.9848], [-1.4166, -0.7415]]], [[[ 1.2974, 0.7846], [ 0.0192, -0.5955]], [[ 1.2644, -0.0339], [ 2.0762, -0.3012]], [[ 0.0851, -2.6027], [ 0.7671, 0.1446]]], [[[ 0.6687, -3.5530], [ 0.8310, -2.0815]], [[ 0.0152, 0.4236], [-1.3839, -0.7723]], [[-0.2303, -1.6282], [-0.4059, 0.4638]]]])
random_tensor作為是否保留分支的直接置0項(xiàng),若drop_path的概率設(shè)為0.2,random_tensor中的數(shù)有0.2的概率為0,而output中被保留概率為0.8。
結(jié)合drop_path的調(diào)用,若x為輸入的張量,其通道為[B,C,H,W],那么drop_path的含義為在一個Batch_size中,隨機(jī)有drop_prob的樣本,不經(jīng)過主干,而直接由分支進(jìn)行恒等映射。
總結(jié)
到此這篇關(guān)于正則化DropPath/drop_path用法(Python實(shí)現(xiàn))的文章就介紹到這了,更多相關(guān)正則化DropPath/drop_path內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python創(chuàng)建和使用字典實(shí)例詳解
字典是python中唯一內(nèi)建的映射類型。字典中的值并沒有特殊的順序,但是都存儲在一個特定的鍵(key)里。2013-11-11python網(wǎng)絡(luò)應(yīng)用開發(fā)知識點(diǎn)淺析
在本篇內(nèi)容中小編給學(xué)習(xí)python的朋友們整理了關(guān)于網(wǎng)絡(luò)應(yīng)用開發(fā)的相關(guān)知識點(diǎn)以及實(shí)例內(nèi)容,需要的朋友們參考下。2019-05-05Python隨手筆記之標(biāo)準(zhǔn)類型內(nèi)建函數(shù)
Python提供了一些內(nèi)建函數(shù)用于基本對象類型:cmp(),repr(),str(),type()和等同于repr()的(' ')操作符,本文給大家分享Python隨手筆記之標(biāo)準(zhǔn)類型內(nèi)建函數(shù),對python內(nèi)建函數(shù)相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12Python selenium文件上傳下載功能代碼實(shí)例
這篇文章主要介紹了Python selenium文件上傳下載功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04Python正則表達(dá)式高效處理文本數(shù)據(jù)的秘訣輕松掌握
當(dāng)談到文本處理和搜索時,正則表達(dá)式是Python中一個強(qiáng)大且不可或缺的工具,正則表達(dá)式是一種用于搜索、匹配和處理文本的模式描述語言,可以在大量文本數(shù)據(jù)中快速而靈活地查找、識別和提取所需的信息,2023-11-11python皮爾遜相關(guān)性數(shù)據(jù)分析分析及實(shí)例代碼
這篇文章主要為大家介紹了python皮爾遜相關(guān)性分析及實(shí)例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02pyqt5、qtdesigner安裝和環(huán)境設(shè)置教程
這篇文章主要介紹了pyqt5、qtdesigner安裝和環(huán)境設(shè)置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09