[TOC]
# 視頻地址
https://share.weiyun.com/14885e04050da9f53f7670532acb782c
http://pan.baidu.com/s/1skDzV5N
http://cloud.video.taobao.com/play/u/144304055/p/1/e/6/t/1/50010974167.mp4
# ppt地址
http://www.zifuture.com/fs/10.tutorial/2.jibenjieshao.pptx
# 深度學習
深度學習Deep Learning,簡稱DL,又稱DNN,即深度神經網絡Deep Natural Networks。
在此之前有BP神經網絡,即Back Propgation,反向傳播神經網絡。
通常我們會認為,BP或者其他隱層少的網絡屬于淺層神經網絡,而隱層很多的網絡稱之為DNN,這里的多是沒有具體定義的,如圖所示即是。
而DNN又是個比較寬泛的詞,DNN里面又包括有CNN卷積神經網絡、RNN循環神經網絡、LSTM長短期記憶網絡、GANs對抗網絡等幾大類型,本文我們默認DL指CNN即可,相關意義可以查詢百度。
* 淺層神經網絡

* 深層神經網絡

# CNN

# GPU
GPU:圖形處理單元,即顯卡。以前GPU多為了加速顯示幀率等,最近被用在超級計算上,以支持大量密集運算的需求,比如DL的訓練過程就是。而顯卡又分為三類,即Intel出的集成顯卡、AMD系列、NVIDIA系列,被簡稱集顯、A卡、N卡對于DL的GPU支持,必須是N卡,而且還要能夠支持CUDA,因為舊版的顯卡是不能支持CUDA的,可以下載GPU-Z查看型號和支持情況
顯存:顯卡的內存,由于DL的計算同時也需要消耗很大的顯存空間,所以這個指標也影響著DL的訓練和使用。GPU-Z里面查看的Memory Size即是顯存大小,而Sensors里面的GPU Load是顯卡使用率
對于使用CPU訓練,會特別慢,使用GPU訓練一般會比CPU快10-30倍甚至更多,所以使用GPU訓練是很必要的事情。但是目前很長時間內,GPU的訓練一直都是困擾很多人的問題,因為坑太多了,這里我們就詳細講講關于GPU的那點事~
CUDA:NVIDIA出的一個GPU加速開發工具包,用來做GPU加速開發的支持,CUDA有版本的區分,所以CC庫的編譯和使用也就依賴著編譯時候的版本,目前CC庫提供有CUDA8.0、CUDA7.5的編譯版本,那么對于使用GPU的你而言必須下載安裝對應的CUDA版本和對應的CC版本才行。記得安裝完CUDA后,在環境變量里面加入CUDA的目錄,否則會提示找不到dll。
CUDA下載地址:
CUDA7.5:http://download.pchome.net/development/c/download-194360.html
CUDA8.0:https://developer.nvidia.com/cuda-downloads
CUDA是不支持Win32的,也就是說,CC框架也不能支持Win32下的GPU相關操作
# Protocol buffer
稱為protobuf,簡稱PB,是由google開發的一套數據交互的協議棧庫,他是一個庫,也提供一種協議語法,語法結構跟JSON很相似。你可以使用任何語言解析編碼為protobuf格式的協議數據或者文件,我們后期訓練使用的模型和網絡定義,全部是以protobuf的格式存儲的。
* 協議約定文件

* 協議數據文件

caffe主要采用google protobuf格式描述網絡配置文件,定義DL的各個層參數、訓練時候的超參數和二進制的模型權重,所以caffe的訓練是不需要寫任何代碼來實現的,只有調用caffe模型實現任務的時候需要寫代碼,主要完成訓練任務的是caffe.exe程序
相關資料:
http://blog.csdn.net/menuconfig/article/details/12837173
# LMDB
lmdb是openLDAP項目開發的嵌入式(作為一個庫嵌入到宿主程序)存儲引擎。其主要特性有:
參考:http://www.jianshu.com/p/yzFf8j
在CC中,lmdb是為了加速訓練的需要,所以把圖片文件通過convert_imageset.exe程序存放到一個lmdb數據庫中,然后caffe.exe則讀取該lmdb的數據作為訓練數據,lmdb一般是在一個文件夾里面,有data.mdb和lock.mdb,如下圖:

# 數據集
這里我們指訓練時候指定的數據集,有train數據集、val數據集、test數據集
通常我們會把train和val數據集制作為lmdb數據庫,即:

而test數據集,我們只需要保持label-test.txt就好了
|這三個數據集的意義是||
|-|-|
train|用來訓練的數據集,推薦占全部樣本比重95%
val|用來訓練時候做驗證的數據集,推薦占全部樣本比重4%
test|用來自己寫代碼測試訓練結果模型的數據集,推薦占比1%
這三個數據集是完全不重疊的,就是說,他們之間是沒有重復的圖片文件。
# LOSS
## 損失、誤差
神經網絡的訓練,是通過正向傳播求loss,然后回傳loss調整權重完成的。loss就是當前訓練進展的主要指標,當loss足夠小的時候,表示網絡基本訓練完成。至于多小,取決于當前任務,一般是0.01以下
# 學習率
## lr
learningrate,學習率
神經網絡的訓練,是通過正向傳播求loss,然后回傳loss調整權重完成的。這時候調整權重是根據loss計算然后乘以學習率,就是最終的調整量,所以學習率是控制調整強度的值,也是學習力度的控制,一般我們會給0.01、0.001等值去訓練。學習率控制不好,會導致訓練過程失敗(即loss不下降或者精度不能達標)

# 過擬合、欠擬合

圖1欠擬合 圖2完美 圖3 過擬合
| 說明||
|-|-|
|欠擬合|學習的還不夠,表達能力不夠好
|過擬合|學習過頭了,等于把樣本全背下來記下來了,而沒有學習應該學的知識,對新樣本而言,泛化能力不好。泛化能力即擴展|能力,在新樣本上表現的效果的能力
|中間這個|就是我們想要的數據表達模型被正確學習到的時候,這時候模型泛化能力最好,效果最好
# 迭代
指數據傳入網絡后進行一次前向運算的過程,稱為一次迭代
# Batch
## 批次
訓練時候,通常會一次一批樣本去訓練他,綜合起來調整loss。這時候迭代一次是用了一批圖片
# 數據集轉換

# 訓練

# 遷移學習
## finetune
又叫模型微調,利用已經訓練好的模型,初始化一個新的訓練任務。就是說,新任務根據這個舊模型開始學習,這樣的學習就有一個很好的起點,就會很快得到好的結果。比如我們會在大數據集上訓練一個模型(ImageNet數據集),然后新的小任務數據集上識別的時候,基于該模型去訓練,將會很容易得到好的效果。若不這么做,我們新的訓練任務通常需要非常大量的樣本才能得到好效果。所以這個技術非常有用和關鍵。稱做微調,是因為做遷移學習的時候學習率會比從頭訓練的學習率要低,表示根據已有模型以低的學習率來微調模型權重,訓練新的任務。形象的說,一個模型因為見過很復雜的數據,那么他能夠通過微微的調整來適應小的新數據,而且做到很好的效果。
主要的就是--weights這個參數指定的模型
# 暫停恢復
## resume
訓練過程允許中斷然后調整參數,然后使用保存的快照繼續訓練,就是所謂的resume
主要是--snapshot參數指定的solverstate快照實現繼續訓練
# 使用模型

- cc框架
- 視頻課程
- 第一課:CC框架簡介
- 第二課:相關基本概念
- 第三課:訓練驗證碼識別
- 第四課:圖像識別、分類、人臉識別
- 第五課:CNN+LSTM少樣本高精度驗證碼識別
- 第六課:總結和展望
- 快速入門
- 常用碼表-label-map
- 目標檢測入門
- 人臉檢測入門
- 重要說明必看
- 雜項
- CC框架使用須知
- 機器學習速成課程 谷歌
- cc4.0視頻教程
- 前言
- cc4.0介紹
- 第一課筆記
- yzm-lstm.cpp 帶注釋
- 第二課筆記
- 眾籌結果公示
- 第三課筆記
- 目標檢測算法之SSD
- 第四課筆記
- 其他資訊
- YOLO3
- 資料
- 性能計算
- 筆記
- cc4.0訓練流程圖
- cc4.0 alexnet 訓練 mnist
- cc4.0 googlenet 訓練 mnist
- cc4.0 加層
- tensorflow -> caffemodel課題筆記
- getnetShape
- RPN
- 記錄
- 數據集
- mnist
- Cifar10
- mtcnn樣本轉ssd樣本易語言代碼