√ 本書內(nèi)容來自作者長期學(xué)習(xí)研究及在阿里一線相關(guān)工作經(jīng)歷。
√ Caffe是應(yīng)用廣的深度學(xué)習(xí)框架,非常適于用來練手和入門。
√ 本書側(cè)重解決實際問題及理解深度學(xué)習(xí)理論,實例、習(xí)題豐富。
√ 既狠抓基功又緊扣產(chǎn)業(yè),既詳述工具、模型又深入分析源碼。
《深度學(xué)習(xí):21天實戰(zhàn)Caffe》是一本深度學(xué)習(xí)入門讀物。以目前已經(jīng)大量用于線上系統(tǒng)的深度學(xué)習(xí)框架Caffe為例,由淺入深,從 Caffe 的配置、部署、使用開始學(xué)習(xí),通過閱讀 Caffe 源碼理解其精髓,加強對深度學(xué)習(xí)理論的理解,最終達到熟練運用 Caffe 解決實際問題的目的。和國外機器學(xué)習(xí)、深度學(xué)習(xí)大部頭著作相比,《深度學(xué)習(xí):21天實戰(zhàn)Caffe》偏重動手實踐,將難以捉摸的枯燥理論用淺顯易懂的形式表達,透過代碼揭開其神秘面紗,更多地貼近實際應(yīng)用。
卜居,真名趙永科,CSDN 博主,現(xiàn)就職于阿里云計算有限公司,從事計算機體系結(jié)構(gòu)、高性能計算系統(tǒng)設(shè)計。對計算機視覺、深度學(xué)習(xí)具有濃厚興趣。擅長 CPU/GPU/FPGA 的算法加速與性能優(yōu)化。
上篇 初見
第1天 什么是深度學(xué)習(xí) 2
1.1 星星之火,可以燎原 3
1.2 師夷長技 4
1.2.1 谷歌與微軟 4
1.2.2 Facebook、亞馬遜與NVIDIA 5
1.3 中國崛起 6
1.3.1 BAT在路上 6
1.3.2 星光閃耀 7
1.3.3 企業(yè)熱是風(fēng)向標 8
1.4 練習(xí)題 9
第2天 深度學(xué)習(xí)的過往 10
2.1 傳統(tǒng)機器學(xué)習(xí)的局限性 10
2.2 從表示學(xué)習(xí)到深度學(xué)習(xí) 11
2.3 監(jiān)督學(xué)習(xí) 12
2.4 反向傳播算法 13
2.5 卷積神經(jīng)網(wǎng)絡(luò) 15
2.6 深度學(xué)習(xí)反思 17
2.7 練習(xí)題 18
2.8 參考資料 18
第3天 深度學(xué)習(xí)工具匯總 19
3.1 Caffe 19
3.2 Torch & OverFeat 20
3.3 MxNet 22
3.4 TensorFlow 22
3.5 Theano 24
3.6 CNTK 24
3.7 練習(xí)題 25
3.8 參考資料 26
第4天 準備Caffe環(huán)境 27
4.1 Mac OS環(huán)境準備 27
4.2 Ubuntu環(huán)境準備 28
4.3 RHEL/Fedora/CentOS環(huán)境準備 29
4.4 Windows環(huán)境準備 29
4.5 常見問題 32
4.6 練習(xí)題 32
4.7 參考資料 33
第5天 Caffe依賴包解析 34
5.1 ProtoBuffer 34
5.2 Boost 38
5.3 GFLAGS 38
5.4 GLOG 39
5.5 BLAS 40
5.6 HDF5 41
5.7 OpenCV 42
5.8 LMDB和LEVELDB 42
5.9 Snappy 43
5.10 小結(jié) 43
5.11 練習(xí)題 49
5.12 參考資料 49
第6天 運行手寫體數(shù)字識別例程 50
6.1 MNIST數(shù)據(jù)集 50
6.1.1 下載MNIST數(shù)據(jù)集 50
6.1.2 MNIST數(shù)據(jù)格式描述 51
6.1.3 轉(zhuǎn)換格式 53
6.2 LeNet-5模型 60
6.2.1 LeNet-5模型描述 60
6.2.2 訓(xùn)練超參數(shù) 65
6.2.3 訓(xùn)練日志 66
6.2.4 用訓(xùn)練好的模型對數(shù)據(jù)進行預(yù)測 76
6.2.5 Windows下訓(xùn)練模型 76
6.3 回顧 78
6.4 練習(xí)題 79
6.5 參考資料 79
篇尾語 80
中篇 熱戀
第7天 Caffe代碼梳理 82
7.1 Caffe目錄結(jié)構(gòu) 82
7.2 如何有效閱讀Caffe源碼 84
7.3 Caffe支持哪些深度學(xué)習(xí)特性 86
7.3.1 卷積層 86
7.3.2 全連接層 89
7.3.3 激活函數(shù) 91
7.4 小結(jié) 99
7.5 練習(xí)題 99
7.6 參考資料 100
第8天 Caffe數(shù)據(jù)結(jié)構(gòu) 101
8.1 Blob 101
8.1.1 Blob基本用法 102
8.1.2 數(shù)據(jù)結(jié)構(gòu)描述 108
8.1.3 Blob是怎樣煉成的 109
8.2 Layer 125
8.2.1 數(shù)據(jù)結(jié)構(gòu)描述 126
8.2.2 Layer是怎樣建成的 127
8.3 Net 136
8.3.1 Net基本用法 136
8.3.2 數(shù)據(jù)結(jié)構(gòu)描述 139
8.3.3 Net是怎樣繪成的 139
8.4 機制和策略 146
8.5 練習(xí)題 147
8.6 參考資料 148
第9天 Caffe I/O模塊 149
9.1 數(shù)據(jù)讀取層 149
9.1.1 數(shù)據(jù)結(jié)構(gòu)描述 149
9.1.2 數(shù)據(jù)讀取層實現(xiàn) 150
9.2 數(shù)據(jù)變換器 155
9.2.1 數(shù)據(jù)結(jié)構(gòu)描述 155
9.2.2 數(shù)據(jù)變換器的實現(xiàn) 156
9.3 練習(xí)題 171
第10天 Caffe模型 172
10.1 prototxt表示 173
10.2 內(nèi)存中的表示 176
10.3 磁盤上的表示 176
10.4 Caffe Model Zoo 178
10.5 練習(xí)題 180
10.6 參考資料 180
第11天 Caffe前向傳播計算 181
11.1 前向傳播的特點 181
11.2 前向傳播的實現(xiàn) 182
11.2.1 DAG構(gòu)造過程 182
11.2.2 Net Forward實現(xiàn) 190
11.3 練習(xí)題 192
第12天 Caffe反向傳播計算 193
12.1 反向傳播的特點 193
12.2 損失函數(shù) 193
12.2.1 算法描述 194
12.2.2 參數(shù)描述 195
12.2.3 源碼分析 195
12.3 反向傳播的實現(xiàn) 203
12.4 練習(xí)題 205
第13天 Caffe最優(yōu)化求解過程 207
13.1 求解器是什么 207
13.2 求解器是如何實現(xiàn)的 208
13.2.1 算法描述 208
13.2.2 數(shù)據(jù)結(jié)構(gòu)描述 210
13.2.3 CNN訓(xùn)練過程 218
13.2.4 CNN預(yù)測過程 225
13.2.5 Solver的快照和恢復(fù)功能 227
13.3 練習(xí)題 230
第14天 Caffe實用工具 231
14.1 訓(xùn)練和預(yù)測 231
14.2 特征提取 241
14.3 轉(zhuǎn)換圖像格式 247
14.4 計算圖像均值 254
14.5 自己編寫工具 257
14.6 練習(xí)題 257
篇尾語 258
下篇 升華
第15天 Caffe計算加速 260
15.1 Caffe計時功能 260
15.2 Caffe GPU加速模式 262
15.2.1 GPU是什么 262
15.2.2 CUDA是什么 263
15.2.3 GPU、CUDA和深度學(xué)習(xí) 263
15.2.4 Caffe GPU環(huán)境準備 264
15.2.5 切換到Caffe GPU加速模式 268
15.3 Caffe cuDNN加速模式 269
15.3.1 獲取cuDNN 270
15.3.2 切換到Caffe cuDNN加速模式 270
15.3.3 Caffe不同硬件配置性能 272
15.4 練習(xí)題 273
15.5 參考資料 273
第16天 Caffe可視化方法 275
16.1 數(shù)據(jù)可視化 275
16.1.1 MNIST數(shù)據(jù)可視化 275
16.1.2 CIFAR10數(shù)據(jù)可視化 277
16.1.3 ImageNet數(shù)據(jù)可視化 278
16.2 模型可視化 279
16.2.1 網(wǎng)絡(luò)結(jié)構(gòu)可視化 279
16.2.2 網(wǎng)絡(luò)權(quán)值可視化 281
16.3 特征圖可視化 288
16.4 學(xué)習(xí)曲線 295
16.5 小結(jié) 298
16.6 練習(xí)題 298
16.7 參考資料 299
第17天 Caffe遷移和部署 300
17.1 從開發(fā)測試到生產(chǎn)部署 300
17.2 使用Docker 302
17.2.1 Docker基本概念 302
17.2.2 Docker安裝 303
17.2.3 Docker入門 305
17.2.4 Docker使用進階 312
17.3 練習(xí)題 317
17.4 參考資料 317
第18天 關(guān)于ILSVRC不得不說的一些事兒 318
18.1 ImageNet數(shù)據(jù)集 318
18.2 ILSVRC比賽項目 319
18.2.1 圖像分類(CLS) 320
18.2.2 目標定位(LOC) 320
18.2.3 目標檢測(DET) 321
18.2.4 視頻目標檢測(VID) 322
18.2.5 場景分類 322
18.3 Caffe ILSVRC實踐 323
18.4 練習(xí)題 326
18.5 參考資料 326
第19天 放之四海而皆準 327
19.1 圖像分類 327
19.1.1 問題描述 327
19.1.2 應(yīng)用案例——商品分類 330
19.2 圖像中的字符識別 332
19.2.1 問題描述 332
19.2.2 應(yīng)用案例——身份證實名認證 333
19.3 目標檢測 337
19.3.1 問題描述 337
19.3.2 最佳實踐——運行R-CNN例程 337
19.4 人臉識別 340
19.4.1 問題描述 340
19.4.2 最佳實踐——使用Face++ SDK實現(xiàn)人臉檢測 342
19.5 自然語言處理 343
19.5.1 問題描述 343
19.5.2 最佳實踐——NLP-Caffe 344
19.6 藝術(shù)風(fēng)格 350
19.6.1 問題描述 350
19.6.2 最佳實踐——style-transfer 352
19.7 小結(jié) 354
19.8 練習(xí)題 354
19.9 參考資料 355
第20天 繼往開來的領(lǐng)路人 356
20.1 Caffe Traps and Pitfalls 356
20.1.1 不支持任意數(shù)據(jù)類型 356
20.1.2 不夠靈活的高級接口 357
20.1.3 繁雜的依賴包 357
20.1.4 堪憂的卷積層實現(xiàn) 357
20.1.5 架構(gòu)之殤 358
20.1.6 應(yīng)用場景局限性 358
20.2 最佳實踐——Caffe2 359
20.3 練習(xí)題 361
20.4 參考資料 362
第21天 新生 363
21.1 三人行,必有我?guī)? 363
21.2 路漫漫其修遠兮,吾將上下而求索 364
篇尾語 366
結(jié)束語 367
附錄A 其他深度學(xué)習(xí)工具