實驗3:卷積神經網絡
實驗3:卷積神經網絡
| 姓名和學號? | |
|---|---|
| 本實驗屬于哪門課程? | 中國海洋大學25秋《軟件工程原理與實踐》 |
| 實驗名稱? | 實驗3:卷積神經網絡 |
| 博客鏈接: | 選做 |
學習要求
- CNN的基本結構:卷積、池化、全連接
- 典型的?絡結構:AlexNet、VGG、GoogleNet、ResNet
實驗內容
【第?部分:代碼練習】
實驗3:MNIST數據集分類
實驗過程:

實驗4:CIFAR10 數據集分類

實驗5:VGG16對CIFAR10分類

問題總結
【第?部分:問題總結】思考下?的問題:
dataloader ?? shuffle 取不同值有什么區別?
- 在模型訓練階段,通常會對數據集進行順序打亂(即設置 shuffle = True)。這種做法有助于避免樣本原有的排列順序對模型訓練造成干擾,從而提升訓練過程的穩定性與泛化能力。
- 而在模型測試或驗證階段,一般會保持數據的原始順序(即設置 shuffle = False),因為此時的目標是在一個固定的數據子集上評估模型性能,數據的先后順序不會對評估結果產生影響。
transform ?,取了不同值,這個有什么區別?
transform 是數據預處理和增強的關鍵環節,在本實驗中主要應用了以下幾種操作:ToTensor、Normalize、RandomCrop 以及 RandomHorizontalFlip。
ToTensor 的作用是將圖像數據轉換為 PyTorch 框架可處理的 Tensor 格式,同時將原始像素值從 [0, 255] 的范圍線性映射到 [0.0, 1.0] 的區間內。
Normalize 即數據標準化,通過對輸入數據進行中心化和縮放,使其分布更為集中和穩定,從而有助于提升模型訓練的收斂速度與訓練過程的穩定性。
RandomCrop 是一種數據增強技術,通過對圖像進行隨機區域裁剪,可以模擬不同視角下的圖像輸入,進而提升模型對于物體位置變化的魯棒性,增強其泛化能力。
RandomHorizontalFlip 同樣是常用的數據增強方法,它以一定概率對圖像進行水平方向的隨機翻轉,這有助于增加訓練樣本的多樣性,使模型能夠學習到更具不變性的特征表示
epoch 和 batch 的區別?
在訓練過程中,epoch 是輪"輪次" 指模型完整遍歷一次整個訓練集的周期。batch 是批,為了高效處理海量數據,每個輪次的數據會被劃分為多個"批次"。模型每學習完一個批次的數據,就會執行一次參數更新,通過這種小步快跑的方式逐步優化。
1x1的卷積和 FC 有什么區別?主要起什么作??
全連接層在處理特征圖時,會將其展平為一維向量,這不僅丟失了特征圖原有的空間結構信息,還會因與每個神經元相連而產生巨大的參數量。相比之下,1x1卷積通過在空間維度上進行點式卷積,能實現跨通道的信息整合與維度變換。這種方式不僅顯著減少了參數,更重要的是,它完整保留了特征圖的空間結構,使得特征處理更加高效。
residual leanring 為什么能夠提升準確率?
隨著網絡深度增加,梯度在反向傳播過程中可能會逐漸變小甚至消失,這使得靠近輸入端的淺層網絡參數難以得到有效的梯度更新,從而導致模型訓練困難。殘差學習機制通過引入“快捷連接”巧妙地解決了這一問題。它不再要求網絡層直接學習一個完整的目標輸出,而是轉而學習輸出與輸入之間的殘差(即變化量)。這種將學習目標從“完整映射”簡化為“殘差映射”的做法,極大地降低了優化難度。即使某個殘差塊未能學到有效特征(殘差趨近于零),其輸出也至少等于輸入,保證了網絡性能不會發生退化,從而為構建更深的模型奠定了基礎。
代碼練習??,?絡和1989年 Lecun 提出的 LeNet 有什么區別?
代碼所構建的網絡是一個經過改良的LeNet變體。其核心改進在于:激活函數部分,用ReLU替代了傳統的S型函數,利用其稀疏激活性和梯度特性,有效抑制了梯度消失,加快了模型收斂;輸出層部分,則采用了現今主流的“全連接層 + LogSoftmax”結構,替代了LeNet最初設計中的高斯連接層,這使得網絡能夠直接輸出歸一化的對數概率,與負對數似然損失函數完美配合,優化了訓練過程。
代碼練習??,卷積以后feature map 尺?會變?,如何應? Residual Learning?
為了確保快捷路徑上的數據與主路徑輸出能夠進行逐元素相加,需要對其維度和尺寸進行匹配。具體通過三種方式實現:
- 采用1x1卷積來調整通道數,使其與主路徑輸出的通道維度一致;
- 其次,在卷積操作中應用填充(Padding),以避免特征圖尺寸在卷積過程中被縮小;
- 最后,通過步長(Stride)設置為1的池化層來逐步降低特征圖的空間尺寸(如高和寬),從而完成尺寸對齊。
有什么?法可以進?步提升準確率?
- 在模型結構方面,通過增加網絡的深度來增強其表征復雜模式的能力。
- 延長了訓練周期(Epoch數)
- 采用了更先進的優化器
- 應用了更多樣化的數據增強技術,通過增加訓練數據的多樣性來有效提升模型的泛化能力。
體會
遇到的問題及解決方法
在做實驗5:使用VGG對CIFAR10分類的時候,在全連接層的前向傳播過程中,我發現出現了一個矩陣形狀不匹配的錯誤。如下圖所示:

我發現是矩陣形狀不匹配的問題。
所以我將VGG網絡中歐冠的全連接層修改為``self.classifier = nn.Linear(512, 10)`,這樣特征圖經過卷積和池化層后的輸出形狀是512,與全連接層的輸入尺寸匹配,就可以正常訓練了。
心得體會
在本次實驗中我體會到了理論與實踐結合的重要性,我們需要通過實際編碼和調試才能理解深度學習框架的使用技巧和建立對模型性能的直觀感受。
浙公網安備 33010602011771號