Python 深度學習之登堂入室

Python基操

  • enumerate枚舉亂序問題, 只有集合枚舉順序會錯亂,而列表和元組不會
classes = {'daffodil', 'snowdrop', 'lilyvalley', 'bluebell'}
for index, name in enumerate(classes):
    print(index, name)
    
0 snowdrop
1 bluebell
2 lilyvalley
3 daffodil
classes = ['daffodil', 'snowdrop', 'lilyvalley', 'bluebell']
for index, name in enumerate(classes):

    print(index, name)

0 daffodil
1 snowdrop
2 lilyvalley
3 bluebell

classes = ('daffodil', 'snowdrop', 'lilyvalley', 'bluebell')
for index, name in enumerate(classes):
    print(index, name)

0 daffodil
1 snowdrop
2 lilyvalley
3 bluebell

深度學習

Cuda

  • CUDA 是 NVIDIA 公司的並行計算架構。 該架構通過利用 GPU 的處理能力,可大幅提升計算性能
  • Tensorflow + Cuda + cudnn + GTX1050Ti真香,CPU訓練一輪的時間,用GPU直接就訓練完了,但是本人的開發環境下,不知爲何cuda老是報錯:Attempting to fetch value instead of handling error Internal: failed to get device attribute 13 for device 0: CUDA_ERROR_UNKNOWN: unknown error,暫未找到原因和解決辦法,初步推斷是顯存分配的問題,因爲重啓一下jupyter notebook的內核就正常了,然後運行一段時間後,又報錯。(Anaconda3 + Python3.7 + Cuda10.0)

Tensorboard

可視化深度學習工具,神器,待探索

模型存儲和復原

# 模型存儲與恢復實例化
saver = tf.train.Saver() 
# 恢復存儲模型
ckpt = tf.train.get_checkpoint_state(MODEL_SAVE_PATH) 
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, ckpt.model_checkpoint_path)
with tf.Session() as sess:
    ckpt = tf.train.get_checkpoint_state(MODEL_SAVE_PATH) 
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)

小試牛刀

數據集製作

在網上隨便找了一個鮮花的圖片集,製作成tfrecords數據集輸入搭建的卷積神經網絡,進行訓練
在這裏插入圖片描述

卷積神經網絡搭建

在這裏插入圖片描述

初步訓練結果

在這裏插入圖片描述在這裏插入圖片描述

結果反思

  • 損失值存在許多尖峯脈衝,做出以下推斷
    1. batch_size過小,目前是簡單測試,每次只輸入了一張照片,需要製作一次讀取數據集中多個數據的函數。
    2. 數據集數據不太好,目測數據集的圖片還比較好
    3. 學習率還是太大,可能性較小,學習率已經設置爲0.0001,且設置了指數衰減學習率
    4. 卷積神經網絡設置不恰當,如果是這個就比較難調了,因爲一開始設置的時候就是設置的較適中的數值。
      1. 層數太少
      2. 卷積、池化核設置不合適

下一步方案

  1. 先對當前訓練的模型,直接用訓練集進行評估和單次輸入測試。
    1. 單次輸入測試老是被報錯,模型恢復使用還沒有弄通。
  2. 編寫讀取數據集中多個數據的函數
  3. 修改batch_size進行訓練
  4. 嘗試使用已經多次被練習的數據集進行訓練測試cifar-10數據集
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章