內 容 簡 介
書中以案例形式詳細介紹了PyTorch的各種實戰(zhàn)應用。具體內容包括PyTorch與TensorFlow的對比和PyTorch的發(fā)展現(xiàn)狀,張量Tensor和自動微分Autograd及其具體應用,PyTorch構建神經(jīng)網(wǎng)絡,基于PyTorch構建復雜應用,PyTorch高級技巧與實戰(zhàn)應用,網(wǎng)絡剪枝應用。
中國科學院院士,清華大學人工智能研究院院長張鈸傾力推薦
詳解PyTorch框架分布式計算、CUDA擴展等高級使用技巧
涵蓋圖像分類、文本處理、物體定位、自動架構搜索等諸多領域實戰(zhàn)案例
豐富的新科研成果引用展示,緊跟人工智能發(fā)展前沿
提供完整源代碼文件
前言
深度學習作為近些年來人工智能領域發(fā)展非常迅速,應用普及范圍非常廣的技術,受到越來越多的關注。其在諸多領域創(chuàng)造出的許多成果,讓人們開始暢想未來的人工智能時代。因此無論是科研人員還是相關領域從業(yè)者,都在密切關注并學習了解這一領域的進展。
但是回想在十年前,想要讓一個初學者迅速進行一個訓練深度學習模型的實驗則是十分困難的。歸根結底是因為當時并沒有一款廣泛普及的深度學習編程框架。每個研究者需要編寫出復雜的反向傳播求導過程,處理數(shù)據(jù)多線程加載,GPU并行計算等等技術細節(jié)。這其實也限制了當時初期深度學習技術的普及。但是好在隨著如Caffe、Theano、TensorFlow、PyTorch等等一系列深度學習框架的出現(xiàn),讓普通的研究者也可以輕松實現(xiàn)大規(guī)模數(shù)據(jù)并行編程,這才使得深度學習領域發(fā)展百花齊放,日益蓬勃。
本書所介紹的便是以上諸多編程框架中,我個人認為當前使用方法較靈活易懂的PyTorch可微編程框架。雖然PyTorch發(fā)展才不過兩三年時間,但是憑借其良好的應用接口,簡潔直觀的編程模型,動態(tài)靈活的計算過程,成為后起之秀,逐漸被廣大研究者所推崇使用。我也是在平時科研期間主要應用PyTorch框架,書中介紹的諸多內容也是我平時的經(jīng)驗總結。可以略夸張地說,在使用PyTorch框架編程之后,限制你科研成果進展的只剩下你的想象力和創(chuàng)造力,在編程實現(xiàn)上幾乎沒有任何阻礙了。
全書分為6章。第1章是PyTorch簡介,可以讓讀者簡略了解PyTorch框架的發(fā)展起源歷程。第2~5章則由淺入深逐步介紹PyTorch的使用方法和編程技巧。其中先介紹了PyTorch作為支撐可微編程模型的基礎張量以及自動求導,然后介紹高層封裝模塊用以搭建神經(jīng)網(wǎng)絡,接著講解實際的應用任務實現(xiàn),這里需要涉及到諸多外延內容,如數(shù)據(jù)加載預處理、模型加載保存、多GPU分布式計算、自定義擴展實現(xiàn)底層算子等等。最后一章通過一個完整的實驗任務全面展示PyTorch在實際科研中的應用。在每一章講解過程中,都會附帶一些實戰(zhàn)應用案例,以便于讀者能夠快速應用相關知識解決實際問題。這些實際問題我在設計之時,特別考慮了其實用性和理解性之間的平衡。既可以起到應用相關知識技能點,又不使其淪為過于簡單的Toy Example。同時許多實戰(zhàn)應用和案例講解均是以當前深度學習領域前沿的研究成果進行展示,讓讀者在學習PyTorch框架之時,并不局限于只學習技術,更能了解跟蹤當前科研領域的最新進展。
本書是我編寫的第一部書籍,在寫作過程中也存在著諸多不足。比如全書聚焦于PyTorch應用環(huán)節(jié),對于其框架底層具體實現(xiàn)講解缺乏。同時限于篇幅和內容范圍,許多案例講解我只能以簡化設置形式進行講解。對于實際應用中有著更為復雜處理流程的大型任務,本文缺少進一步展示。雖然如此,我仍滿懷誠意盡我所能使本書完美。我希望這本書可以成為人工智能領域初學者的啟發(fā),促使讀者能夠大膽探索當前人工智能各個方向的研究領域,創(chuàng)造出屬于自己的研究成果。最后歡迎各位批評指正,感謝成書過程中所有幫助過我的人!
作 者
2020年7月
王宇龍
博士,畢業(yè)于清華大學計算機系,曾在CVPR/AAAI/TIP等多家國際會議期刊發(fā)表論文,研究方向為深度學習可解釋性、模型剪枝、對抗安全等。知乎“機器學習”話題優(yōu)秀回答者(@Yulong),F(xiàn)任螞蟻金服算法專家。
目錄
第1章 PyTorch簡介
1.1 深度學習簡介 1
1.2 PyTorch的由來 2
1.2.1 深度學習框架回顧 2
1.2.2 PyTorch前身:Torch7 4
1.2.3 Torch7的重生 5
1.3 PyTorch與TensorFlow對比 5
1.3.1 TensorFlow簡介 6
1.3.2 動靜之爭 6
1.3.3 二者借鑒融合 7
1.3.4 PyTorch的優(yōu)勢 7
1.4 PyTorch發(fā)展現(xiàn)狀 8
1.4.1 主要版本特點回顧 8
1.4.2 準備工作 8
第2章 PyTorch基礎計算
2.1 PyTorch核心基礎概念:張量Tensor 11
2.1.1 Tensor基本介紹 11
2.1.2 Tensor數(shù)學運算操作 15
2.1.3 Tensor索引分片合并變換操作 20
2.1.4 Tensor類成員方法 22
2.1.5 在GPU上計算 24
2.2 PyTorch可微編程核心:自動微分Autograd 25
2.2.1 PyTorch自動微分簡介 25
2.2.2 可微分張量 25
2.2.3 利用自動微分求梯度 26
2.2.4 Function:自動微分實現(xiàn)基礎 29
2.2.5 注意事項 31
2.3 PyTorch應用實戰(zhàn)一:實現(xiàn)卷積操作 34
2.3.1 卷積操作 34
2.3.2 利用張量操作實現(xiàn)卷積 36
2.4 PyTorch應用實戰(zhàn)二:實現(xiàn)卷積神經(jīng)網(wǎng)絡進行圖像分類 38
第3章 PyTorch構建神經(jīng)網(wǎng)絡
3.1 PyTorch神經(jīng)網(wǎng)絡計算核心:torch.nn 43
3.1.1 nn.Module概述 43
3.1.2 結構化構建神經(jīng)網(wǎng)絡 47
3.1.3 經(jīng)典神經(jīng)網(wǎng)絡層介紹 49
3.1.4 函數(shù)式操作nn.functional 53
3.2 PyTorch優(yōu)化器 55
3.2.1 torch.optim概述 55
3.2.2 經(jīng)典優(yōu)化器介紹 56
3.2.3 學習率調整 57
3.3 PyTorch應用實戰(zhàn)一:實現(xiàn)二值化神經(jīng)網(wǎng)絡 59
3.3.1 二值化網(wǎng)絡BinaryNet概述 59
3.3.2 具體實現(xiàn) 60
3.4 PyTorch應用實戰(zhàn)二:利用LSTM實現(xiàn)文本情感分類 63
3.4.1 文本情感分類 63
3.4.2 具體實現(xiàn) 65
第4章 基于PyTorch構建復雜應用
4.1 PyTorch數(shù)據(jù)加載 70
4.1.1 數(shù)據(jù)預處理:torchvision.transforms 70
4.1.2 數(shù)據(jù)加載:torch.utils.data 73
4.2 PyTorch模型搭建 77
4.2.1 經(jīng)典模型復用與分享:torchvision.models 78
4.2.2 模型加載與保存 79
4.2.3 導出為ONNX格式 85
4.3 訓練過程中日志記錄與可視化 89
4.4 PyTorch應用實戰(zhàn)一:在CIFAR10數(shù)據(jù)集進行神經(jīng)網(wǎng)絡結構搜索 93
4.4.1 可微分網(wǎng)絡架構搜索DARTS介紹 94
4.4.2 簡化問題建模:以ResNet為例 95
4.4.3 具體實現(xiàn) 96
4.5 PyTorch應用實戰(zhàn)二:在ImageNet數(shù)據(jù)集進行弱監(jiān)督物體定位 108
4.5.1 GradCAM解釋顯著圖方法介紹 108
4.5.2 弱監(jiān)督物體定位任務 109
4.5.3 具體實現(xiàn) 110
第5章 PyTorch高級技巧與實戰(zhàn)應用
5.1 PyTorch并行計算 118
5.1.1 大規(guī)模數(shù)據(jù)集加載 118
5.1.2 模型的高效并行計算 122
5.1.3 加速模型計算和減少顯存使用 125
5.2 擴展PyTorch 126
5.2.1 利用C++和CUDA實現(xiàn)自定義算子 126
5.2.2 利用TorchScript導出PyTorch模型 136
5.3 豐富的PyTorch資源介紹 145
5.4 PyTorch應用實戰(zhàn)一:在ImageNet上訓練MobileNet-V2網(wǎng)絡 146
5.4.1 MobileNet-V2網(wǎng)絡介紹 146
5.4.2 具體實現(xiàn) 147
5.5 PyTorch應用實戰(zhàn)二:利用CUDA擴展實現(xiàn)MixConv算子 157
5.5.1 MixConv算子介紹 157
5.5.2 借鑒Depthwise卷積實現(xiàn)思路 158
5.5.3 具體實現(xiàn) 160
第6章 PyTorch完整實戰(zhàn)講解——網(wǎng)絡剪枝應用
6.1 網(wǎng)絡剪枝介紹 169
6.1.1 剪枝方法分類 169
6.1.2 基于權重通道重要性的結構化剪枝 170
6.1.3 問題定義與建模 170
6.2 具體實現(xiàn)思路 171
6.2.1 如何附屬控制門值 171
6.2.2 剪枝結構搜索 172
6.2.3 剪枝模型訓練 174
6.3 完整代碼實現(xiàn) 175
6.3.1 模型搭建 176
6.3.2 剪枝器實現(xiàn) 181
6.3.3 學習控制門變量 183
6.3.4 剪枝模型 187
6.3.5 訓練模型 189
6.3.6 規(guī);瘑佑柧毴蝿 193
6.4 實驗結果 198
參考文獻