第三次作業:卷積神經網絡


視頻心得

1.卷積神經網絡與傳統神經網絡從結構上看都是層級結構,但由於圖像數據處理方式(卷積,池化)差異使卷積神經網絡的輸出結果更加接近我們想要的結果。
2.​ 通過視頻的學習,對於神經網絡的認識還是不夠的,對於AlexNet、ZFNet等結構還只是處於大體了解基本原理。關於如何合理地應用這些特殊的卷積神經網絡還要再仔細學習。
3.池化是卷積神經網絡的另一重要概念。簡單理解可以看作是對圖像的一次“有損壓縮”,因為在實際的訓練中,我們並不需要對圖像中的每一個細節都進行特征提取和訓練,所以池化的作用就是更進一步的信息抽象和特征提取,當然也會減小數據的處理量。

卷積神經網絡代碼練習

1.引入庫

2.加載數據(MNIST)


3.顯示數據集中的部分圖像

4.創建網絡


5.定義訓練和測試函數


6.在小型全連接網絡上訓練

7.在卷積神經網絡上訓練

8.打亂像素順序再次在兩個網絡上訓練與測試

像素打亂:

重新定義訓練與測試函數,我們寫了兩個函數 train_perm 和 test_perm,分別對應着加入像素打亂順序的訓練函數與測試函數。


在全連接網絡上訓練與測試

在卷積神經網絡上訓練與測試

總結:從打亂像素順序的實驗結果來看,全連接網絡的性能基本上沒有發生變化,但是 卷積神經網絡的性能明顯下降。這是因為對於卷積神經網絡,會利用像素的局部關系,但是打亂順序以后,這些像素間的關系將無法得到利用。

CIFAR10數據分類

1.用 torchvision加載並歸一化 CIFAR10

2.展示 CIFAR10 里面的一些圖片


3.接下來定義網絡,損失函數和優化器

4.訓練網絡


5.從測試集中取出8張圖片

6.把圖片輸入模型,看看CNN把這些圖片識別成什么

可以看到其中幾個識別錯了

7.求准確率

用VGG16進行CIFAR10分類

1.定義 dataloader


2.VGG 網絡定義

(原代碼中出現“cfg”無法識別問題,將參數cfg改為self.cfg后正常運行)
3. 網絡訓練

(原代碼出現RuntimeError: mat1 and mat2 shapes cannot be multiplied (128x512 and 2048x10)報錯,因此對nn.Linear 參數進行修改,把2048改成了512。)
4.測試驗證准確率

使用一個簡化版的 VGG 網絡,就能夠顯著地將准確率由 64%,提升到 83.49%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM