Pytorch實(shí)現(xiàn)AlexNet解決各類數(shù)據(jù)集(cifar10/mnist/imagenet)分類

AlexNet

完整代碼地址

Why AlexNet very good?

  1. 為什么Alexnet能在圖2012 ImageNet LSVRC-2012 像識(shí)別(分類) competition取得這么好的成績(jī)
  2. Alexnet的網(wǎng)絡(luò)結(jié)構(gòu)以及,參數(shù)數(shù)量的計(jì)算
  3. 為了避免過擬合使用的技巧:Data Augmentation(數(shù)據(jù)增強(qiáng)),正則化Relu以及dropout,局部響應(yīng)歸一化LRN。
  4. 對(duì)比了多個(gè)小的卷積核和大的卷積核的區(qū)別(前面BAT面試題)。
  5. Alexnet取得成功的原因,主要三條:
    大量數(shù)據(jù),Deep Learning領(lǐng)域應(yīng)該感謝李飛飛團(tuán)隊(duì)搞出來如此大的標(biāo)注數(shù)據(jù)集合ImageNet;

GPU,這種高度并行的計(jì)算神器確實(shí)助了洪荒之力,沒有神器在手,Alex估計(jì)不敢搞太復(fù)雜的模型;

算法的改進(jìn),包括網(wǎng)絡(luò)變深、數(shù)據(jù)增強(qiáng)、ReLU、Dropout等。

  1. Alexnet網(wǎng)絡(luò)結(jié)構(gòu)以及參數(shù)數(shù)量的計(jì)算
    Alexnet網(wǎng)絡(luò)的大體結(jié)構(gòu)如下(論文以及一般的blog都是如下這個(gè)圖,但是看起來很不直觀):
image

下面給出兩個(gè)更好理解的結(jié)構(gòu)圖,5個(gè)卷積層+3個(gè)全連接層:

image
image

來源:stackoverflow
https://www.learnopencv.com/understanding-alexnet/

各層的參數(shù)計(jì)算如下,下圖為5個(gè)卷積層的參數(shù):

image

全連接層如下:

image

可以看到:卷積層的參數(shù)明顯少于全連接層的參數(shù)。其中,網(wǎng)絡(luò)大概有62.3 million parameters,其中卷積層占比約6%,單占比95%的計(jì)算。

  1. 為了避免過擬合使用的技巧:Data Augmentation(數(shù)據(jù)增強(qiáng)),正則化Relu以及dropout
  2. 1 Data Augmentation(數(shù)據(jù)增強(qiáng))
    數(shù)據(jù)增強(qiáng)簡(jiǎn)單的辦法如,圖片翻轉(zhuǎn)Mirroring,隨機(jī)裁剪Random Crops。
image
image
  1. 2 使用ReLU非線性激活函數(shù)
    使用ReLU非線性激活函數(shù)而不選擇sigmoid或tanh函數(shù),ReLU優(yōu)勢(shì)在于:

速度快 和sigmoid函數(shù)需要計(jì)算指數(shù)和倒數(shù)相比,relu函數(shù)其實(shí)就是一個(gè)max(0,x),計(jì)算代價(jià)小很多。

減輕梯度消失問題,從而可以訓(xùn)練更深的網(wǎng)絡(luò)。

稀疏性 通過對(duì)大腦的研究發(fā)現(xiàn),大腦在工作的時(shí)候只有大約5%的神經(jīng)元是激活的,而采用sigmoid激活函數(shù)的人工神經(jīng)網(wǎng)絡(luò),其激活率大約是50%。有論文聲稱人工神經(jīng)網(wǎng)絡(luò)在15%-30%的激活率時(shí)是比較理想的。因?yàn)閞elu函數(shù)在輸入小于0時(shí)是完全不激活的,因此可以獲得一個(gè)更低的激活率.

  1. 3 使用Dropout(只在最后幾個(gè)全連接層做)
image
image

為什么Dropout有效?

Dropout背后理念和集成模型很相似。在Drpout層,不同的神經(jīng)元組合被關(guān)閉,這代表了一種不同的結(jié)構(gòu),所有這些不同的結(jié)構(gòu)使用一個(gè)的子數(shù)據(jù)集并行地帶權(quán)重訓(xùn)練,而權(quán)重總和為1。如果Dropout層有 n 個(gè)神經(jīng)元,那么會(huì)形成 2^{n} 個(gè)不同的子結(jié)構(gòu)。在預(yù)測(cè)時(shí),相當(dāng)于集成這些模型并取均值。這種結(jié)構(gòu)化的模型正則化技術(shù)有利于避免過擬合。Dropout有效的另外一個(gè)視點(diǎn)是:由于神經(jīng)元是隨機(jī)選擇的,所以可以減少神經(jīng)元之間的相互依賴,從而確保提取出相互獨(dú)立的重要特征。

  1. 4 局部響應(yīng)歸一化LRN(Local Response Normalization)
    提出了LRN層,對(duì)局部神經(jīng)元的活動(dòng)創(chuàng)建競(jìng)爭(zhēng)機(jī)制,使得其中響應(yīng)比較大的值變得相對(duì)更大,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力。
image

補(bǔ)充
2個(gè)33的卷積層和一個(gè)55卷積層的區(qū)別?(某BAT的一個(gè)面試題,也可以理解為多個(gè)小的卷積層和一個(gè)大的卷積層的區(qū)別),問題來源:stackoverflow,VGG中給出了答案,如下:

多個(gè)卷積層可以增加網(wǎng)絡(luò)的深度,從而學(xué)習(xí)更復(fù)雜的特征
2個(gè)33的卷積層的參數(shù)少于一個(gè)55卷積層的參數(shù)

code:


class AlexNet(nn.Module):

    def __init__(self,  num_classes=1000):
        super().__init__()

        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

文章引用于 FishBear_move_on
編輯 Lornatang
校準(zhǔn) Lornatang

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容