2023.4.8看程序(還沒看完)
1.? [Python 列表 append()函數(shù)使用詳解](http://t.csdn.cn/C7qBp)
2.? [【pytorch】torch.nn.GroupNorm的使用](http://t.csdn.cn/TzyPi)
3.? [torch.nn.GroupNorm](http://t.csdn.cn/67cIV)
4.? [深度學(xué)習(xí)Normalization層大總結(jié)](http://t.csdn.cn/PwmC7)
5.? [關(guān)于nn.ReLU函數(shù)](http://t.csdn.cn/3Cc4H)
6.? [PyTorch學(xué)習(xí)筆記(1)nn.Sequential、nn.Conv2d、nn.BatchNorm2d、nn.ReLU和nn.MaxPool2d](http://t.csdn.cn/tA2eF)
7.? [nn.Sequential()](http://t.csdn.cn/Ss5hM)
8.? [pytorch中的model.eval()和BN層](http://t.csdn.cn/XlTK6)
9.? [pytorch bn 如何凍結(jié) 以及train 和val下區(qū)別](http://t.csdn.cn/0YXe0)
10. [Pytorch-模型參數(shù):named\_parameters()、parameters()、state\_dict()區(qū)別](http://t.csdn.cn/zdowT)
11. [pytorch:關(guān)于module.train函數(shù)和module.eval函數(shù)區(qū)別分析](http://t.csdn.cn/EmxMr)
12. [內(nèi)置函數(shù) - getattr()函數(shù)](http://t.csdn.cn/HLys0)
13. [【Python系列】eval 函數(shù)](http://t.csdn.cn/cE2ML)
14. [pytorch:深入理解 reshape(), view(), transpose(), permute() 函數(shù)](http://t.csdn.cn/lI9fV)
15. [torch.stack()的官方解釋,詳解以及例子](http://t.csdn.cn/xiXC6)
16. [pytorch中的torch.max()和torch.min()](http://t.csdn.cn/oGOEk)
17. [Python2 long() 函數(shù)](http://t.csdn.cn/bTING)
18. [Pytorch中torch.unsqueeze()和torch.squeeze()函數(shù)解析](http://t.csdn.cn/huqkR)
19. [Pytorch中tensor維度和torch.max()函數(shù)中dim參數(shù)的理解](http://t.csdn.cn/FzfGu)
20. [torch.topk() 函數(shù)詳解](http://t.csdn.cn/hkcbg)

4-深度學(xué)習(xí)Normalization大總結(jié)
Group Normalization(GN)是針對Batch Normalization(BN)在batch size較小時錯誤率較高而提出的改進(jìn)算法。
Normalization的主要作用如下:
a. 緩解梯度消失,可以增大 learning rate, 使訓(xùn)練更快收斂。
b. 簡化調(diào)參,網(wǎng)絡(luò)更穩(wěn)定。在調(diào)參時,學(xué)習(xí)率調(diào)得過大容易出現(xiàn)震蕩于不收斂,而 BN 抑制了參數(shù)微小變化隨網(wǎng)絡(luò)加深而被放大的問題,因此對于參數(shù)變化的適應(yīng)能力更強(qiáng)。
c. 更不容易過擬合, 因此可以替代 dropout,或者少用 dropout,可以減少 L2 正則化的權(quán)重,同時可以減少 argument 的操作,可以不用太操心 initialization 的操作。
Normalization的位置:
通常在神經(jīng)網(wǎng)絡(luò)中按照如下的位置進(jìn)行排列:
Conv -> Norm層 -> 激活函數(shù)層
當(dāng)然也有人嘗試如下的放置方法
Conv -> 激活函數(shù)層 -> Norm 層
后來在Rethinking the Usage of Batch Normalization and Dropout in the Training ofDeep Neural Network中證明:我們不應(yīng)該把Norm 層放在ReLU之前,因?yàn)镽eLU的非負(fù)響應(yīng)會使權(quán)值層更新的方式不太理想。
Normalization的幾種方式:
1、batchNorm是在batch上,對NHW做歸一化,對小batchsize效果不好;
2、layerNorm在通道方向上,對CHW歸一化,主要對RNN作用明顯;
3、instanceNorm在圖像像素上,對HW做歸一化,用在風(fēng)格化遷移;
4、GroupNorm將channel分組,然后再做歸一化;
5、SwitchableNorm是將BN、LN、IN結(jié)合,賦予權(quán)重,讓網(wǎng)絡(luò)自己去學(xué)習(xí)歸一化層應(yīng)該使用什么方法。下圖將三種方法進(jìn)行了形象的說明。從C方向看過去是指一個個通道,從N看過去是一張張圖片。每6個豎著排列的小正方體組成的長方體代表一張圖片的一個feature map。藍(lán)色的方塊是一起進(jìn)行Normalization的部分。由此就可以很清楚的看出,Batch Normalization是指6張圖片中的每一張圖片的同一個通道一起進(jìn)行Normalization操作。layerNorm是一張圖片中的通道之間進(jìn)行Normalization操作,而Instance Normalization是指單張圖片的單個通道單獨(dú)進(jìn)行Noramlization操作。
6-PyTorch學(xué)習(xí)筆記(1)nn.Sequential、nn.Conv2d、nn.BatchNorm2d、nn.ReLU和nn.MaxPool2d
1.為什么引入非線性激勵函數(shù)?
如果不適用激勵函數(shù),那么在這種情況下每一層的輸出都是上層輸入的線性函數(shù),很容易驗(yàn)證,無論你神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當(dāng),這種情況就是最原始的感知機(jī)(perceptron)了。正因?yàn)樯厦娴脑颍覀儧Q定引入非線性函數(shù)作為激勵函數(shù),這樣深層神經(jīng)網(wǎng)絡(luò)就有意義了,不再是輸入的線性組合,可以逼近任意函數(shù),最早的想法是用sigmoid函數(shù)或者tanh函數(shù),輸出有界,很容易充當(dāng)下一層的輸入
2.為什么引入Relu?
采用sigmoid等函數(shù),算激活函數(shù)時候(指數(shù)運(yùn)算),計(jì)算量大,反向傳播求誤差梯度時,求導(dǎo)涉及除法,計(jì)算量相當(dāng)大,而采用Relu激活函數(shù),整個過程的計(jì)算量節(jié)省很多。 對于深層網(wǎng)絡(luò),sigmoid函數(shù)反向傳播時,很容易就出現(xiàn)梯度消失的情況(在sigmoid函數(shù)接近飽和區(qū)時,變換太緩慢,導(dǎo)數(shù)趨于0,這種情況會造成信息丟失),從而無法完成深層網(wǎng)絡(luò)的訓(xùn)練。 Relu會使一部分神經(jīng)元的輸出為0,這樣就造成了網(wǎng)絡(luò)的稀疏性,并且減少了參數(shù)的相互依存關(guān)系,緩解了過擬合問題的發(fā)生。 其實(shí),relu函數(shù)的作用就是增加了神經(jīng)網(wǎng)絡(luò)各層之間的非線性關(guān)系,否則,如果沒有激活函數(shù),層與層之間是簡單的線性關(guān)系,每層都相當(dāng)于矩陣相乘,這樣怎么能夠完成我們需要神經(jīng)網(wǎng)絡(luò)完成的復(fù)雜任務(wù), 
enumerate()函數(shù)
enumerate 是 Python 中的一個內(nèi)置函數(shù),它的作用是將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在 for 循環(huán)當(dāng)中。
使用方法如下:
在上面的代碼中,`items` 是可遍歷的數(shù)據(jù)對象,`i` 是下標(biāo),`item` 是對應(yīng)的數(shù)據(jù)。
你也可以指定開始的下標(biāo),如下所示:
在這個例子中,下標(biāo)從 1 開始。
總的來說,`enumerate` 函數(shù)的作用是將一個可遍歷的數(shù)據(jù)對象組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),使得我們能夠在遍歷數(shù)據(jù)的同時獲取數(shù)據(jù)的下標(biāo)。
8-pytorch中的model.eval()和BN層
如果網(wǎng)絡(luò)模型model中含有BN層,則在預(yù)測時應(yīng)當(dāng)將模式切換為評估模式,即model.eval()。
評估模擬下BN層的均值和方差應(yīng)該是整個訓(xùn)練集的均值和方差,即 moving mean/variance。
訓(xùn)練模式下BN層的均值和方差為mini-batch的均值和方差,因此應(yīng)當(dāng)特別注意。
11-pytorch:關(guān)于module.train函數(shù)和module.eval函數(shù)區(qū)別分析
model.train() :啟用 BatchNormalization 和 Dropout
model.eval() :不啟用 BatchNormalization 和 Dropout