視頻心得
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.測試驗證准確率