日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

动手学习深度学习(总结梳理)——13. 深度卷积神经网络(AlexNet)

發布時間:2024/5/14 卷积神经网络 150 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动手学习深度学习(总结梳理)——13. 深度卷积神经网络(AlexNet) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.?模型設計?

2. 激活函數

3. 模型

3. 讀取數據集

4. 訓練AlexNet


AlexNet的背景故事和深度學習的發展


AlexNet和LeNet的設計理念非常相似,但也存在顯著差異。 首先,AlexNet比相對較小的LeNet5要深得多。 AlexNet由八層組成:五個卷積層、兩個全連接隱藏層和一個全連接輸出層。 其次,AlexNet使用ReLU而不是sigmoid作為其激活函數。 下面,讓我們深入研究AlexNet的細節。

1.?模型設計?

2. 激活函數

此外,AlexNet將sigmoid激活函數改為更簡單的ReLU激活函數。 一方面,ReLU激活函數的計算更簡單,它不需要如sigmoid激活函數那般復雜的求冪運算。 另一方面,當使用不同的參數初始化方法時,ReLU激活函數使訓練模型更加容易。 當sigmoid激活函數的輸出非常接近于0或1時,這些區域的梯度幾乎為0,因此反向傳播無法繼續更新一些模型參數。 相反,ReLU激活函數在正區間的梯度總是1。 因此,如果模型參數沒有正確初始化,sigmoid函數可能在正區間內得到幾乎為0的梯度,從而使模型無法得到有效的訓練。

3. 模型

import torch from torch import nn from d2l import torch as d2lnet = nn.Sequential(''' 這里,我們使用一個11*11的更大窗口來捕捉對象 '''''' 同時,步幅為4,以減少輸出的高度和寬度 '''''' 另外,輸出通道的數目遠大于LeNet '''nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),''' 減小卷積窗口,使用填充為2來使得輸入與輸出的高和寬一致,且增大輸出通道數 '''nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),''' 使用三個連續的卷積層和較小的卷積窗口。 '''''' 除了最后的卷積層,輸出通道的數量進一步增加。 '''''' 在前兩個卷積層之后,匯聚層不用于減少輸入的高度和寬度 '''nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),nn.Flatten(),''' 這里,全連接層的輸出數量是LeNet中的好幾倍。使用dropout層來減輕過擬合 '''nn.Linear(6400, 4096), nn.ReLU(),nn.Dropout(p=0.5),nn.Linear(4096, 4096), nn.ReLU(),nn.Dropout(p=0.5),''' 最后是輸出層。由于這里使用Fashion-MNIST,所以用類別數為10,而非論文中的1000 '''nn.Linear(4096, 10))

我們構造一個高度和寬度都為224的單通道數據,來觀察每一層輸出的形狀。 它與最開始的圖中的AlexNet架構相匹配。

X = torch.randn(1, 1, 224, 224) for layer in net:X=layer(X)print(layer.__class__.__name__,'output shape:\t',X.shape) Conv2d output shape: torch.Size([1, 96, 54, 54]) ReLU output shape: torch.Size([1, 96, 54, 54]) MaxPool2d output shape: torch.Size([1, 96, 26, 26]) Conv2d output shape: torch.Size([1, 256, 26, 26]) ReLU output shape: torch.Size([1, 256, 26, 26]) MaxPool2d output shape: torch.Size([1, 256, 12, 12]) Conv2d output shape: torch.Size([1, 384, 12, 12]) ReLU output shape: torch.Size([1, 384, 12, 12]) Conv2d output shape: torch.Size([1, 384, 12, 12]) ReLU output shape: torch.Size([1, 384, 12, 12]) Conv2d output shape: torch.Size([1, 256, 12, 12]) ReLU output shape: torch.Size([1, 256, 12, 12]) MaxPool2d output shape: torch.Size([1, 256, 5, 5]) Flatten output shape: torch.Size([1, 6400]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 4096]) ReLU output shape: torch.Size([1, 4096]) Dropout output shape: torch.Size([1, 4096]) Linear output shape: torch.Size([1, 10])

3. 讀取數據集

盡管本文中AlexNet是在ImageNet上進行訓練的,但我們在這里使用的是Fashion-MNIST數據集。因為即使在現代GPU上,訓練ImageNet模型,同時使其收斂可能需要數小時或數天的時間。 將AlexNet直接應用于Fashion-MNIST的一個問題是,Fashion-MNIST圖像的分辨率(28×28像素)低于ImageNet圖像。 為了解決這個問題,我們將它們增加到224×224(通常來講這不是一個明智的做法,但我們在這里這樣做是為了有效使用AlexNet架構)。 我們使用d2l.load_data_fashion_mnist函數中的resize參數執行此調整。

batch_size = 128 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)

4. 訓練AlexNet

現在,我們可以開始訓練AlexNet了。與此前的LeNet相比,這里的主要變化是使用更小的學習速率訓練,這是因為網絡更深更廣、圖像分辨率更高,訓練卷積神經網絡就更昂貴

lr, num_epochs = 0.01, 10 d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

?

5. QA

5.1 alexNet讓機器去自己尋找特征,這些找到的特征都符合人類的邏輯嘛?如果不符合要怎么解釋?

當然不符合,我們設計之初就是為了讓模型朝著損失降低的方向走,所以根本沒有加入人為的因素進去,自然根本就不會涉及人類邏輯的地方。

5.2 為什么AlexNet最后要有兩個相同的全連接層Dense(4096)?一個不行嘛?

我嘗試過,這里其實采用兩個全連接層效果會更好,兩個非常大的全連接層的組合是個非常大的MLP模型了,可能我們之前的卷積層篩選的特征不夠好不夠深,需要兩個全連接層進行模型的復雜化。

總結

以上是生活随笔為你收集整理的动手学习深度学习(总结梳理)——13. 深度卷积神经网络(AlexNet)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。