1. 程式人生 > >DeepLearning tutorial(7)深度學習框架Keras的使用-進階

DeepLearning tutorial(7)深度學習框架Keras的使用-進階

上一篇文章總結了Keras的基本使用方法,相信用過的同學都會覺得不可思議,太簡潔了。十多天前,我在github上發現這個框架的時候,關注Keras的人還比較少,這兩天無論是github還是微薄,都看到越來越多的人關注和使用Keras。所以這篇文章就簡單地再介紹一下Keras的使用,方便各位入門。

主要包括以下三個內容:

  • 訓練CNN並儲存訓練好的模型。
  • 將CNN用於特徵提取,用提取出來的特徵訓練SVM。
  • 視覺化CNN卷積層後的特徵圖。

1. 載入資料

資料是圖片格式,利用pyhton的PIL模組讀取,並轉為numpy.array型別。這部分的程式碼在data.py裡:

2. 訓練CNN並儲存訓練好的CNN模型

將上一步載入進來的資料分為訓練資料(X_train,30000個樣本)和驗證資料(X_val,12000個樣本),構建CNN模型並訓練。訓練過程中,每一個epoch得到的val-accuracy都不一樣,我們儲存達到最好的val-accuracy時的模型,利用Python的cPickle模組保持。(Keras的開發者最近在新增用hdf5保持模型的功能,我試了一下,沒用成功,去github發了issue也沒人回,估計還沒完善,hdf5壓縮率會更高,儲存下來的檔案會更小。)

這部分的程式碼在cnn.py裡,執行:

python cnn.py

在第Epoch 4得到96.45%的validation accuracy,執行完後會得到model.pkl這份檔案,儲存的就是96.45%對應的模型:

這裡寫圖片描述

3.將CNN用於特徵提取,用提取出來的特徵訓練SVM

上一步得到了一個val-accuracy為96.45%的CNN模型,在一些論文中經常會看到用CNN的全連線層的輸出作為特徵,然後去訓練其他分類器。這裡我也試了一下,用全連線層的輸出作為樣本的特徵向量,訓練SVM。SVM用的是scikit learn裡的演算法。

這部分程式碼在cnn-svm.py,執行:

python cnn-svm.py

得到下圖的輸出,可以看到,cnn-svm的準確率提高到97.89%:

這裡寫圖片描述

4.視覺化CNN卷積層後的特徵圖

將卷積層和全連線層後的特徵圖、特徵向量以圖片形式展示出來,用到matplotlib這個庫。這部分程式碼在get_feature_map.py

裡。執行:

python get_feature_map.py

得到全連線層的輸出,以及第一個卷積層輸出的4個特徵圖:

全連線層後的輸出

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述