深度學(xué)習(xí)實(shí)踐:基于Caffe的解析
定 價(jià):69 元
叢書名:智能系統(tǒng)與技術(shù)叢書
- 作者:薛云峰
- 出版時(shí)間:2018/11/1
- ISBN:9787111610434
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP181
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書主要介紹Caffe的技術(shù)原理和一些高級(jí)使用技巧,首先介紹深度學(xué)習(xí)的趨勢(shì)和業(yè)內(nèi)動(dòng)態(tài),然后介紹Caffe的基礎(chǔ)知識(shí)。在理解了Caffe算法的基礎(chǔ)上,介紹Caffe的技術(shù)原理和特點(diǎn),包括數(shù)學(xué)知識(shí)和設(shè)計(jì)知識(shí)。*后介紹Caffe深度學(xué)習(xí)多任務(wù)網(wǎng)絡(luò)。本書將實(shí)踐和現(xiàn)有系統(tǒng)進(jìn)行無縫對(duì)接,并詳述了各種調(diào)參技巧。
為什么要寫這本書
2012年年中,我開始關(guān)注深度學(xué)習(xí)這一領(lǐng)域,當(dāng)時(shí)正好是深度學(xué)習(xí)浪潮開始爆發(fā)的時(shí)間,我感到非常幸運(yùn)的是能在一個(gè)對(duì)的時(shí)間進(jìn)入該領(lǐng)域,當(dāng)時(shí)的自己也是在不斷的試錯(cuò)中學(xué)習(xí)這一領(lǐng)域的知識(shí)。一直以來我都非常希望人工智能能夠得到真正的發(fā)展,希望技術(shù)能夠輔助人類解決各種問題,而且人工智能同時(shí)又是一門非常有意思的學(xué)科,所以我選擇了長期投入深度學(xué)習(xí)這一領(lǐng)域,希望自己也能有所成,但是真正進(jìn)入這一領(lǐng)域?qū)W習(xí)的時(shí)候才發(fā)現(xiàn)想要學(xué)好并不是那么順利。
我在學(xué)習(xí)深度學(xué)習(xí)技術(shù)的過程中經(jīng)歷了很多困難,遇到了很多“陷阱”,一路走來跌跌撞撞,當(dāng)時(shí)就想如果深度學(xué)習(xí)領(lǐng)域也能有相關(guān)的入門書籍,講解深度學(xué)習(xí)的基礎(chǔ)知識(shí)就好了,這樣新手們就能夠快速入手,從主干入手,避開遮住主干的枝葉,從而更快速地進(jìn)入這一領(lǐng)域。希望本書能夠?yàn)槌鯇W(xué)深度學(xué)習(xí)的程序員提供一個(gè)科普入門的指引。在經(jīng)歷了各種繁雜的事情之后,本書的編寫也給我?guī)砹瞬簧倏鞓,使得我有機(jī)會(huì)系統(tǒng)地總結(jié)自己在深度學(xué)習(xí)領(lǐng)域獲得的一些經(jīng)驗(yàn)和教訓(xùn),希望這些能給大家?guī)韼椭1緯偨Y(jié)了基礎(chǔ)層的數(shù)學(xué)公式,以及其在 Caffe中的寫法,后續(xù)還列舉了一些我在訓(xùn)練學(xué)習(xí)過程中遇到的實(shí)際問題,例如增加新的層、人臉識(shí)別、人物屬性的識(shí)別等,以及對(duì)過去一些工作經(jīng)驗(yàn)的總結(jié)。
每一種框架都有優(yōu)有劣,框架不會(huì)影響最終的結(jié)果,希望大家盡量忽略框架的結(jié)構(gòu)和實(shí)現(xiàn),多多掌握理論部分,在實(shí)踐中,不斷提升自己在這一領(lǐng)域的實(shí)戰(zhàn)經(jīng)驗(yàn)和理論知識(shí),框架只是末,理論才是本。
本書主要是針對(duì)初學(xué)者入門所編寫的一本書,其實(shí)最初我也沒有想過要寫一本書,都是在網(wǎng)絡(luò)上發(fā)表一些博客和文章,不斷地對(duì)自己的技術(shù)和學(xué)習(xí)進(jìn)行更新和總結(jié)。后來,因?yàn)橐粋(gè)偶然的機(jī)會(huì),我遇到了本書的策劃編輯楊繡國老師(lisa),在她的建議和鼓勵(lì)下我決定寫一本入門級(jí)的深度學(xué)習(xí)教程。本書以一個(gè)工程師的視角來觀察深度學(xué)習(xí)技術(shù)帶給我們的便利,同時(shí)我也希望更多的技術(shù)工程師能夠投入這一領(lǐng)域,也許變革就在明天,縱觀人工智能的發(fā)展歷史,有高潮也有寒冬,很多技術(shù)都是經(jīng)歷了多次的起伏變化然后才逐漸趨于成熟,而如今人工智能正在經(jīng)歷第三次的高潮,也許寒冬將至,但是即便如此也并不會(huì)影響深度學(xué)習(xí)技術(shù)未來發(fā)展的大趨勢(shì),相信這一技術(shù)會(huì)變得像今天的軟件開發(fā)技術(shù)一樣成熟。
讀者對(duì)象
根據(jù)深度學(xué)習(xí)的用戶目標(biāo)劃分,可以總結(jié)出如下幾類讀者對(duì)象。
深度學(xué)習(xí)的愛好者和研究者。
深度學(xué)習(xí)實(shí)踐應(yīng)用工程師。
深度學(xué)習(xí)理論研究員。
對(duì)深度學(xué)習(xí)感興趣的大學(xué)師生。
開設(shè)相關(guān)課程的大專院校。
如何閱讀本書
建議讀者在閱讀本書時(shí),首先對(duì)本書講解的各個(gè)層做一個(gè)詳細(xì)的了解,能夠運(yùn)用開源數(shù)據(jù)運(yùn)行一些訓(xùn)練示例,學(xué)會(huì)如何使用現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行訓(xùn)練,等熟悉了訓(xùn)練步驟之后,再按照本書的內(nèi)容自行調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)。先使用一個(gè)網(wǎng)絡(luò),根據(jù)本書前10章的內(nèi)容,分別修改和調(diào)整每一種網(wǎng)絡(luò)層的參數(shù),并學(xué)習(xí)相關(guān)的數(shù)學(xué)公式,本書第5章到第10章的內(nèi)容可以不分先后順序進(jìn)行閱讀,大家可以按照自己的喜好和需求隨意選擇閱讀順序。本書使用的Caffe框架是幾個(gè)框架中最基礎(chǔ)的一種,代碼結(jié)構(gòu)簡單,很適合作為C++工程師進(jìn)行深度學(xué)習(xí)的入門參考。
第11章到第14章的內(nèi)容比較適合入門后的讀者在實(shí)踐操作中理解和應(yīng)用深度學(xué)習(xí)技術(shù),每一個(gè)系統(tǒng)都是一個(gè)龐大的工程,本書只是簡略地介紹了需要做的事情,與深度學(xué)習(xí)關(guān)聯(lián)性不大的技術(shù),本書沒有做詳細(xì)介紹,因此大家需要自行查找對(duì)應(yīng)的內(nèi)容以進(jìn)行相應(yīng)的閱讀。第12章的多任務(wù)是目前深度學(xué)習(xí)領(lǐng)域進(jìn)行創(chuàng)新的基石,希望本書的一些觀點(diǎn)能夠提供給大家一些指引,目標(biāo)檢測(cè)從faster rcnn到ssd都是多任務(wù)的處理方式,第14章的內(nèi)容是我進(jìn)行深度學(xué)習(xí)調(diào)參的一些經(jīng)驗(yàn)總結(jié),第一次訓(xùn)練之后,在進(jìn)行準(zhǔn)確度調(diào)整的時(shí)候大家可以將本章內(nèi)容作為參考。
勘誤和支持
由于作者的水平有限,編寫的時(shí)間也很倉促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。為此,我特意創(chuàng)建了一個(gè)GitHub的倉庫,具體網(wǎng)址為:https://github.com/HolidayXue/DeepLearningInAction。大家可以將書中的錯(cuò)誤發(fā)布在Bug勘誤文件夾中,同時(shí)如果有遇到任何問題,就請(qǐng)?jiān)趇ssue中留言,我將盡量在線上為大家提供最滿意的解答。本書中的全部源文件都將發(fā)布在這個(gè)網(wǎng)站上,我也會(huì)將相應(yīng)的功能更新及時(shí)發(fā)布出來。如果大家有更多的寶貴意見,也歡迎發(fā)送郵件至我的郵箱362783516@qq.com,我很期待聽到你們的真摯反饋。
致謝
首先,我要感謝中科院計(jì)算技術(shù)研究所的蔣樹強(qiáng)老師,在他的引領(lǐng)下,我進(jìn)入了深度學(xué)習(xí)技術(shù)這一領(lǐng)域,我對(duì)這一領(lǐng)域的很多概念和入門知識(shí)都是從他那里獲得的;接下來,我要感謝浙江大學(xué)李璽教授,在實(shí)踐過程中,需要進(jìn)行理論突破的時(shí)候,他的指點(diǎn)總是令我猶如醍醐灌頂。
感謝捷尚視覺的余天明在cuda編程實(shí)踐中給予我的幫助,感謝捷尚視覺的林國錫在人臉實(shí)踐應(yīng)用中對(duì)我的指點(diǎn),感謝捷尚視覺的丁連濤在目標(biāo)檢測(cè)中給予我的指點(diǎn)。
感謝機(jī)械工業(yè)出版社華章公司的編輯楊繡國老師,感謝你的魄力和遠(yuǎn)見,在本書編寫期間始終支持我的寫作,正是你的鼓勵(lì)和幫助引導(dǎo)我順利完成全部書稿。
感謝每一位深度學(xué)習(xí)的開發(fā)者,大家的共同努力使得讓人工智能能夠應(yīng)用在我們的未來生活中,從而使得我們的生活更加美好!
謹(jǐn)以此書,獻(xiàn)給深度學(xué)習(xí)的從業(yè)者。
薛云峰(HolidayXue)
中國,杭州,2018年6月
前言
第1章 深度學(xué)習(xí)簡介 1
1.1 深度學(xué)習(xí)的歷史 1
1.2 深度學(xué)習(xí)工具簡介 4
1.3 深度學(xué)習(xí)的未來趨勢(shì) 12
第2章 搭建你的Caffe武器庫 13
2.1 硬件選型 13
2.2 Caffe在Windows下的安裝 14
2.3 Caffe在Linux下的安裝 16
2.3.1 Linux安裝 16
2.3.2 Nvidia CUDA Toolkit的安裝(*.deb方法) 17
2.3.3 Caffe的安裝和測(cè)試 20
2.4 OpenCV的安裝和編譯 23
2.4.1 OpenCV的下載 23
2.4.2 配置環(huán)境變量 24
2.5 Boost庫的安裝和編譯 27
2.6 Python相關(guān)庫的安裝 31
2.7 MATLAB接口的配置 33
2.8 其他庫的安裝 44
2.8.1 LMDB的編譯與安裝 44
2.8.2 LevelDB的編譯與安裝 51
2.8.3 glog的編譯與安裝 57
2.8.4 安裝gflags 63
第3章 Caffe的簡單訓(xùn)練 69
3.1 Caffe轉(zhuǎn)化數(shù)據(jù)工具的使用介紹 69
3.1.1 命令參數(shù)介紹 69
3.1.2 生成文件列表 70
3.1.3 使用的Linux命令簡介 70
3.1.4 生成文件結(jié)果 71
3.1.5 圖片參數(shù)組詳解 71
3.2 Caffe提取特征的工具使用說明 72
3.3 Caffe訓(xùn)練需要的幾個(gè)部件 73
3.3.1 網(wǎng)絡(luò)proto文件的編寫 73
3.3.2 Solver配置 74
3.3.3 訓(xùn)練腳本的編寫 76
3.3.4 訓(xùn)練log解析 76
3.4 Caffe簡單訓(xùn)練分類任務(wù) 79
3.5 測(cè)試訓(xùn)練結(jié)果 86
3.6 使用訓(xùn)練好的模型進(jìn)行預(yù)測(cè) 87
第4章 認(rèn)識(shí)深度學(xué)習(xí)網(wǎng)絡(luò)中的層 97
4.1 卷積層的作用與類別 97
4.1.1 卷積層的作用 97
4.1.2 卷積分類 98
4.2 激活層的作用與類別 99
4.2.1 激活函數(shù)的定義及相關(guān)概念 99
4.2.2 激活函數(shù)的類別 101
4.3 池化層的作用與類別 101
4.3.1 池化層的歷史 101
4.3.2 池化層的作用 102
4.3.3 池化層分類 103
4.4 全連接層的作用與類別 105
4.5 dropout層的作用 106
4.6 損失函數(shù)層 106
第5章 Caffe的框架設(shè)計(jì) 110
5.1 Caffe中CPU和GPU結(jié)構(gòu)的融合 110
5.1.1 SyncedMemory函數(shù)及其功能 110
5.1.2 SyncedMemory類的作用 112
5.2 Caffe訓(xùn)練時(shí)層的各個(gè)成員函數(shù)的調(diào)用順序 112
5.3 Caffe網(wǎng)絡(luò)構(gòu)建函數(shù)的解析 115
5.4 Caffe層如何使用proto文件實(shí)現(xiàn)反射機(jī)制 116
5.4.1 工廠模式 116
5.4.2 層的創(chuàng)建 118
5.5 Caffe的調(diào)用流程圖及函數(shù)順序?qū)б? 122
5.6 Caffe框架使用的編碼思想 125
5.6.1 Caffe的總體結(jié)構(gòu) 125
5.6.2 Caffe數(shù)據(jù)存儲(chǔ)設(shè)計(jì) 128
第6章 基礎(chǔ)數(shù)學(xué)知識(shí) 130
6.1 卷積層的數(shù)學(xué)公式及求導(dǎo) 130
6.2 激活層的數(shù)學(xué)公式圖像及求導(dǎo) 132
6.3 三種池化層的數(shù)學(xué)公式及反向計(jì)算 134
6.4 全連接層的數(shù)學(xué)公式及求導(dǎo) 135
6.4.1 全連接層的前向計(jì)算及公式推導(dǎo) 135
6.4.2 全連接層的反向傳播及公式推導(dǎo) 136
6.5 反卷積層的數(shù)學(xué)公式及求導(dǎo) 137
第7章 卷積層和池化層的使用 139
7.1 卷積層參數(shù)初始化介紹 139
7.2 池化層的物理意義 141
7.3 卷積層和池化層輸出計(jì)算及參數(shù)說明 141
7.4 實(shí)踐:在Caffe框架下用Prototxt定義卷積層和池化層 142
7.4.1 卷積層參數(shù)的編寫 142
7.4.2 必須設(shè)置的參數(shù) 143
7.4.3 其他可選的設(shè)置參數(shù) 143
7.4.4 卷積參數(shù)編寫具體示例 144
7.4.5 卷積參數(shù)編寫小建議 145
第8章 激活函數(shù)的介紹 146
8.1 用ReLU解決sigmoid的缺陷 146
8.2 ReLU及其變種的對(duì)比 148
8.3 實(shí)踐:在Caffe框架下用Prototxt定義激活函數(shù) 150
8.3.1 ReLU 150
8.3.2 PReLU 150
8.3.3 Sigmoid 151
第9章 損失函數(shù) 152
9.1 contrastive_loss函數(shù)和對(duì)應(yīng)層的介紹和使用場(chǎng)景 152
9.2 multinomial_logistic_loss函數(shù)和對(duì)應(yīng)層的介紹和使用說明 154
9.3 sigmoid_cross_entropy函數(shù)和對(duì)應(yīng)層的介紹和使用說明 155
9.4 softmax_loss函數(shù)和對(duì)應(yīng)層的介紹和使用說明 158
9.5 euclidean_loss函數(shù)和對(duì)應(yīng)層的介紹和使用說明 161
9.6 hinge_loss函數(shù)和對(duì)應(yīng)層的介紹和使用說明 162
9.7 infogain_loss函數(shù)和對(duì)應(yīng)層的介紹和使用說明 163
9.8 TripletLoss的添加及其使用 165
9.8.1 TripletLoss的思想 165
9.8.2 TripletLoss梯度推導(dǎo) 166
9.8.3 新增加TripletLossLayer 167
9.9 Coupled Cluster Loss的添加及其使用 176
9.9.1 增加loss層 176
9.9.2 實(shí)現(xiàn)具體示例 177
第10章 Batch Normalize層的使用 194
10.1 batch_normalize層的原理和作用 194
10.2 batch_normalize層的優(yōu)勢(shì) 196
10.3 常見網(wǎng)絡(luò)結(jié)構(gòu)batch_normalize層的位置 197
10.4 proto的具體寫法 202
10.5 其他歸一化層的介紹 204
第11章 回歸網(wǎng)絡(luò)的構(gòu)建 205
11.1 如何生成回歸網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù) 205
11.2 回歸任務(wù)和分類任務(wù)的異同點(diǎn) 206
11.3 回歸網(wǎng)絡(luò)收斂性的判斷 207
11.4 回歸任務(wù)與級(jí)聯(lián)模型 210
第12章 多任務(wù)網(wǎng)絡(luò)的構(gòu)建 214
12.1 多任務(wù)歷史 214
12.2 多任務(wù)網(wǎng)絡(luò)的數(shù)據(jù)生成 216
12.3 如何簡單建立多任務(wù) 216
12.4 近年的多任務(wù)深度學(xué)習(xí)網(wǎng)絡(luò) 217
12.5 多任務(wù)中通用指導(dǎo)性調(diào)參和網(wǎng)絡(luò)構(gòu)建結(jié)論 221
12.5.1 如何避免出現(xiàn)多任務(wù)后性能下降的情況 221
12.5.2 怎樣