logo
Loading...

【QA】CNN經典模型-AlexNet? - Cupoy

本次想與各位介紹CNN經典模型、CNN在圖像識別方面的重要分水領AlexNet

【QA】CNN經典模型-AlexNet?

2021/10/17 上午 00:50
機器學習共學討論版
Ray
觀看數:1424
回答數:1
收藏數:1

本次想與各位介紹CNN經典模型、CNN在圖像識別方面的重要分水領AlexNet

回答列表

  • 2021/10/17 上午 00:57
    Ray
    贊同數:0
    不贊同數:0
    留言數:0

    AlexNet為Alex Krizhevsky、Ilya Sutskever等人於2012年設計出的深層卷積神經網路 下圖為AlexNet的架構 ![010926_sUJd_876354.png](http://kwassistfile.cupoy.com/0000017C8A037E59000000106375706F795F72656C65617365414E53/1632821348727/large)[參考圖片來源](https://my.oschina.net/u/876354/blog/1633143) AlexNet由五個卷積層與三個全連接層共八層組合而成,最後一層全連接層輸出至一個對應1000類別的softmax層,其各層如下: * Input:輸入的原始圖像大小為224×224×3(RGB圖像),在訓練時會經過預處理變為227×227×3,因此輸入維度是training_numx227x227x3。 * Layer1:卷積層,96個11×11×3大小的卷積核掃描,步長爲4。使用ReLU激活函數。採用maxpooling池化,3x3,步長爲2。然後做了一次局部正規化。 * Layer2:卷積層,256個5×5×48的卷積核,步長爲1,但是做了padding,padding長度爲2。使用ReLU激活函數。採用maxpooling池化,3x3,步長爲2。然後做了一次局部正規化。 * Layer3:卷積層,384個3×3×256的卷積核,步長爲1,使用ReLU激活函數。做了padding,padding長度爲1。 * Layer4:卷積層,384個3×3×192的卷積核,步長爲1,使用ReLU激活函數。做了padding,padding長度爲1。 * Layer5:卷積層,256個3×3×192的卷積核,步長爲1,使用ReLU激活函數。做了padding,padding長度爲1。採用maxpooling池化,3x3,步長爲2。然後做了一次Dropout(rate=0.5)。 * Layer6:全連接層,加上ReLU激活函數,4096個神經元。然後做了一次Dropout(rate=0.5)。 * Layer7:全連接層,加上ReLU激活函數,4096個神經元。 * Layer8:全連接層,加上ReLU激活函數,1000個神經元。這一層也就是輸出層了。 ------------------------------ 在AlexNet出現以前,深度學習較為有名的便是LeNet5,但是LeNet在早期的小數據集上雖然可以取得好的成績,在更大的數據集的表現卻不如人意,因此許多人改鑽研其他的機器學習方法,而自從AlexNet出現之後,CNN成為在圖像識別分類的核心算法模型,可說是深度學習時代的一個分水嶺,AlexNet被認為是電腦視覺領域最有影響力的論文之一,它刺激了更多使用卷積神經網路和GPU來加速深度學習的論文的出現。截至2020年,AlexNet論文已被參照超過54,000次。 以下為AlexNet的程式碼: ```python class AlexNet(nn.Module): def __init__(self, num_classes): super(AlexNet, self).__init__() self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=11, padding=2, stride=4) self.conv2 = nn.Conv2d(in_channels=64, out_channels=192, kernel_size=5, padding=2) self.conv3 = nn.Conv2d(in_channels=192, out_channels=384, kernel_size=3, padding=1) self.conv4 = nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, padding=1) self.conv5 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, padding=1) self.fc1 = nn.Linear(in_features=256*6*6, out_features=4096) self.fc2 = nn.Linear(in_features=4096, out_features=1024) self.fc3 = nn.Linear(in_features=1024, out_features=num_classes) def forward(self, x): x = F.relu(self.conv1(x)) x = F.max_pool2d(x, kernel_size=3, stride=2) x = F.relu(self.conv2(x)) x = F.max_pool2d(x, kernel_size=3, stride=2) x = F.relu(self.conv3(x)) x = F.relu(self.conv4(x)) x = F.relu(self.conv5(x)) x = F.max_pool2d(x, kernel_size=3, stride=2) # x = x.view(x.size(0), -1) x = torch.flatten(x, start_dim=1) x = F.relu(self.fc1(x)) x = F.dropout(x, p=0.5) x = F.relu(self.fc2(x)) x = F.dropout(x, p=0.5) x = self.fc3(x) return x ``` AlexNet的特點如下: 1. 激活函數(Activation Function):將 LeNet5使用的 Sigmoid改為ReLU,可以避免因為神經網路層數過深或是梯度過小,而導致梯度消失(Vanishing gradient)的問題,同時ReLu相較於Sigmiod、tanh等激活函數有著收斂速度較快、訓練效能更好、無需複雜計算的優勢,下圖為AlexNet論文中顯示ReLu快速收斂的特性: ![Screen Shot 2021-10-17 at 12.24.50 AM.png](http://kwassistfile.cupoy.com/0000017C8A037E59000000106375706F795F72656C65617365414E53/1632821348728/large) 2. 降低Overfitting:AlexNet 在第六、第七層全連接層中加入了 Dropout ,設定為 0.5以增強模型的泛化能力,並將256x256的圖片進行隨機裁減至224x224,然後進行水平翻轉、對 RGB 通道做主成分分析 (PCA),接著使用高斯擾動,對顏色、光照做變換的方法進行資料增強(Data augmentation) 3. 多GPU訓練:AlexNet 使用了兩塊 GTX580 GPU 做訓練,由於單個 GTX580 GPU 只有 3 GB 的記憶體,無法負荷如此大量的運算,因此將神經網路分布於兩塊 GPU 上平行運算,大幅的加快了訓練速度。 4. 模型架構:AlexNet採用大小為3x3、stride 為2 的 Maxpooling,比 LeNet5使用的平均池化,更能保留重要的特徵,並且因為 stride < size (2<3),因此pooling 可以重疊 (overlap),能重複檢視特徵,避免重要的特徵被捨棄掉,同時避免過擬合的問題。 -------------------- 有興趣進一步了解的人可以參考下連結: * [卷積神經網絡 CNN 經典模型 — LeNet、AlexNet、VGG、NiN with Pytorch code](https://medium.com/ching-i/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E7%B5%A1-cnn-%E7%B6%93%E5%85%B8%E6%A8%A1%E5%9E%8B-lenet-alexnet-vgg-nin-with-pytorch-code-84462d6cf60c) * [AlexNet](https://zh.wikipedia.org/wiki/AlexNet) * [[魔法陣系列] 王者誕生:AlexNet 之術式解析](https://ithelp.ithome.com.tw/articles/10205088) * [CNN入門算法AlexNet介紹(論文詳細解讀)](https://www.twblogs.net/a/5d196f9cbd9eee1ede0583d6) * [深度学习卷积神经网络-AlexNet](https://zhuanlan.zhihu.com/p/42914388) * [AlexNet](https://cvml.ist.ac.at/courses/DLWT_W17/material/AlexNet.pdf) * [ImageNet Classification with Deep Convolutional Neural Networks](https://papers.nips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf)