PyTorch深度學(xué)習(xí)實戰(zhàn)
定 價:119.9 元
- 作者:[美]伊萊·史蒂文斯(Eli Stevens),[意]盧卡·安蒂加(Luca Antiga),[德]托馬斯·菲曼(Thomas Viehmann)
- 出版時間:2022/2/1
- ISBN:9787115577672
- 出 版 社:人民郵電出版社
- 中圖法分類:TP181
- 頁碼:417
- 紙張:
- 版次:01
- 開本:16開
雖然很多深度學(xué)習(xí)工具都使用Python,但PyTorch 庫是真正具備Python 風(fēng)格的。對于任何了解NumPy 和scikit-learn 等工具的人來說,上手PyTorch 輕而易舉。PyTorch 在不犧牲高級特性的情況下簡化了深度學(xué)習(xí),它非常適合構(gòu)建快速模型,并且可以平穩(wěn)地從個人應(yīng)用擴展到企業(yè)級應(yīng)用。由于像蘋果、Facebook和摩根大通這樣的公司都使用PyTorch,所以當(dāng)你掌握了PyTorth,就會擁有更多的職業(yè)選擇。
本書是教你使用 PyTorch 創(chuàng)建神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)系統(tǒng)的實用指南。它幫助讀者快速從零開始構(gòu)建一個真實示例:腫瘤圖像分類器。在此過程中,它涵蓋了整個深度學(xué)習(xí)管道的關(guān)鍵實踐,包括 PyTorch張量 API、用 Python 加載數(shù)據(jù)、監(jiān)控訓(xùn)練以及將結(jié)果進行可視化展示。
本書主要內(nèi)容:
(1)訓(xùn)練深層神經(jīng)網(wǎng)絡(luò);
(2)實現(xiàn)模塊和損失函數(shù);
(3)使用 PyTorch Hub 預(yù)先訓(xùn)練的模型;
(4)探索在 Jupyter Notebooks 中編寫示例代碼。
本書適用于對深度學(xué)習(xí)感興趣的 Python 程序員。了解深度學(xué)習(xí)的基礎(chǔ)知識對閱讀本書有一定的幫助,但讀者無須具有使用 PyTorch 或其他深度學(xué)習(xí)框架的經(jīng)驗。
1.PyTorch核心開發(fā)者教你使用 PyTorch 創(chuàng)建神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)系統(tǒng)的實用指南。
2.詳細講解整個深度學(xué)習(xí)管道的關(guān)鍵實踐,包括 PyTorch張量API、用 Python 加載數(shù)據(jù)、監(jiān)控訓(xùn)練以及對結(jié)果進行可視化。
3. PyTorch核心知識+真實、完整的案例項目,快速提升讀者動手能力:
a.全面掌握PyTorch 相關(guān)的API 的使用方法以及系統(tǒng)掌握深度學(xué)習(xí)的理論和方法;
b.快速從零開始構(gòu)建一個真實示例:腫瘤圖像分類器;
c.輕松學(xué)會使用PyTorch 實現(xiàn)各種神經(jīng)網(wǎng)絡(luò)模型來解決具體的深度學(xué)習(xí)問題;
d.章尾附有“練習(xí)題”,鞏固提升所學(xué)知識;更有配套的代碼文件可下載并動手實現(xiàn)。
4. PyTorch 聯(lián)合創(chuàng)作者Soumith Chintala作序推薦!
5. 書中所有代碼都是基于Python 3.6及以上的版本編寫的,提供源代碼下載。
作者
伊萊·史蒂文斯(Eli Stevens)職業(yè)生涯的大部分時間都在美國硅谷的初創(chuàng)公司工作,從軟件工程師(網(wǎng)絡(luò)設(shè)備制造業(yè))到首席技術(shù)官(開發(fā)腫瘤放療軟件)。在本書出版時,他正在汽車自動駕駛行業(yè)從事機器學(xué)習(xí)相關(guān)工作。
盧卡·安蒂加(Luca Antiga)于21 世紀初擔(dān)任生物醫(yī)學(xué)工程研究員。2010 年到2020 年間,他是一家人工智能工程公司的聯(lián)合創(chuàng)始人和首席技術(shù)官。他參與了多個開源項目,包括PyTorch 的核心模塊。最近,他作為聯(lián)合創(chuàng)始人創(chuàng)建了一家總部位于美國的初創(chuàng)公司,專注于數(shù)據(jù)定義軟件的基礎(chǔ)設(shè)施。
托馬斯·菲曼(Thomas Viehmann)是一名德國慕尼黑的機器學(xué)習(xí)和PyTorch 的專業(yè)培訓(xùn)師和顧問,也是PyTorch 核心開發(fā)人員。擁有數(shù)學(xué)博士學(xué)位的他不畏懼理論,擅長將理論應(yīng)用于實際的計算挑戰(zhàn)。
譯者
牟大恩,武漢大學(xué)碩士研究生畢業(yè),曾先后在網(wǎng)易杭州研究院、優(yōu)酷土豆集團、海通證券總
部負責(zé)技術(shù)研發(fā)及系統(tǒng)架構(gòu)設(shè)計工作,目前任職于東方證券資產(chǎn)管理有限公司。他有多年的Java
開發(fā)及系統(tǒng)設(shè)計經(jīng)驗,專注于互聯(lián)網(wǎng)金融及大數(shù)據(jù)應(yīng)用相關(guān)領(lǐng)域,熱愛技術(shù),喜歡鉆研前沿技術(shù),
是機器學(xué)習(xí)及深度學(xué)習(xí)的深度愛好者。近年來著有《Kafka 入門與實踐》,譯有《Kafka Streams
實戰(zhàn)》,已提交技術(shù)發(fā)明專利申請兩項。
第 1部分 PyTorch核心
第 1章 深度學(xué)習(xí)和PyTorch庫簡介 3
1.1 深度學(xué)習(xí)革命 4
1.2 PyTorch深度學(xué)習(xí) 5
1.3 為什么用PyTorch 6
1.4 PyTorch如何支持深度學(xué)習(xí)概述 8
1.5 硬件和軟件要求 10
1.6 練習(xí)題 12
1.7 本章小結(jié) 13
第 2章 預(yù)訓(xùn)練網(wǎng)絡(luò) 14
2.1 一個識別圖像主體的預(yù)訓(xùn)練網(wǎng)絡(luò) 15
2.1.1 獲取一個預(yù)先訓(xùn)練好的網(wǎng)絡(luò)用于圖像識別 16
2.1.2 AlexNet 17
2.1.3 ResNet 19
2.1.4 準備運行 19
2.1.5 運行模型 21
2.2 一個足以以假亂真的預(yù)訓(xùn)練模型 23
2.2.1 GAN游戲 24
2.2.2 CycleGAN 25
2.2.3 一個把馬變成斑馬的網(wǎng)絡(luò) 26
2.3 一個描述場景的預(yù)訓(xùn)練網(wǎng)絡(luò) 29
2.4 Torch Hub 31
2.5 總結(jié) 32
2.6 練習(xí)題 32
2.7 本章小結(jié) 33
第3章 從張量開始 34
3.1 實際數(shù)據(jù)轉(zhuǎn)為浮點數(shù) 34
3.2 張量:多維數(shù)組 36
3.2.1 從Python列表到PyTorch張量 36
3.2.2 構(gòu)造第 1個張量 37
3.2.3 張量的本質(zhì) 37
3.3 索引張量 40
3.4 命名張量 40
3.5 張量的元素類型 43
3.5.1 使用dtype指定數(shù)字類型 43
3.5.2 適合任何場合的dtype 44
3.5.3 管理張量的dtype屬性 44
3.6 張量的API 45
3.7 張量的存儲視圖 46
3.7.1 索引存儲區(qū) 47
3.7.2 修改存儲值:就地操作 48
3.8 張量元數(shù)據(jù):大小、偏移量和步長 48
3.8.1 另一個張量的存儲視圖 49
3.8.2 無復(fù)制轉(zhuǎn)置 51
3.8.3 高維轉(zhuǎn)置 52
3.8.4 連續(xù)張量 53
3.9 將張量存儲到GPU 55
3.10 NumPy互操作性 57
3.11 廣義張量也是張量 57
3.12 序列化張量 58
3.13 總結(jié) 60
3.14 練習(xí)題 60
3.15 本章小結(jié) 60
第4章 使用張量表征真實數(shù)據(jù) 61
4.1 處理圖像 62
4.1.1 添加顏色通道 62
4.1.2 加載圖像文件 63
4.1.3 改變布局 63
4.1.4 正規(guī)化數(shù)據(jù) 64
4.2 三維圖像:體數(shù)據(jù) 65
4.3 表示表格數(shù)據(jù) 66
4.3.1 使用真實的數(shù)據(jù)集 67
4.3.2 加載葡萄酒數(shù)據(jù)張量 68
4.3.3 表示分數(shù) 70
4.3.4 獨熱編碼 70
4.3.5 何時分類 72
4.3.6 尋找閾值 73
4.4 處理時間序列 75
4.4.1 增加時間維度 76
4.4.2 按時間段調(diào)整數(shù)據(jù) 77
4.4.3 準備訓(xùn)練 79
4.5 表示文本 81
4.5.1 將文本轉(zhuǎn)化為數(shù)字 81
4.5.2 獨熱編碼字符 82
4.5.3 獨熱編碼整個詞 83
4.5.4 文本嵌入 85
4.5.5 作為藍圖的文本嵌入 87
4.6 總結(jié) 88
4.7 練習(xí)題 88
4.8 本章小結(jié) 88
第5章 學(xué)習(xí)的機制 90
5.1 永恒的建模經(jīng)驗 90
5.2 學(xué)習(xí)就是參數(shù)估計 92
5.2.1 一個熱點問題 93
5.2.2 收集一些數(shù)據(jù) 93
5.2.3 可視化數(shù)據(jù) 94
5.2.4 選擇線性模型首試 94
5.3 減少損失是我們想要的 95
5.4 沿著梯度下降 98
5.4.1 減小損失 99
5.4.2 進行分析 99
5.4.3 迭代以適應(yīng)模型 101
5.4.4 歸一化輸入 104
5.4.5 再次可視化數(shù)據(jù) 106
5.5 PyTorch自動求導(dǎo):反向傳播的一切 107
5.5.1 自動計算梯度 107
5.5.2 優(yōu)化器 111
5.5.3 訓(xùn)練、驗證和過擬合 115
5.5.4 自動求導(dǎo)更新及關(guān)閉 120
5.6 總結(jié) 121
5.7 練習(xí)題 122
5.8 本章小結(jié) 122
第6章 使用神經(jīng)網(wǎng)絡(luò)擬合數(shù)據(jù) 123
6.1 人工神經(jīng)網(wǎng)絡(luò) 124
6.1.1 組成一個多層網(wǎng)絡(luò) 125
6.1.2 理解誤差函數(shù) 125
6.1.3 我們需要的只是激活函數(shù) 126
6.1.4 更多激活函數(shù) 128
6.1.5 選擇最佳激活函數(shù) 128
6.1.6 學(xué)習(xí)對于神經(jīng)網(wǎng)絡(luò)意味著什么 129
6.2 PyTorch nn模塊 131
6.2.1 使用__call__()而不是forward() 132
6.2.2 回到線性模型 133
6.3 最終完成一個神經(jīng)網(wǎng)絡(luò) 137
6.3.1 替換線性模型 137
6.3.2 檢查參數(shù) 138
6.3.3 與線性模型對比 141
6.4 總結(jié) 142
6.5 練習(xí)題 142
6.6 本章小結(jié) 142
第7章 區(qū)分鳥和飛機:從圖像學(xué)習(xí) 143
7.1 微小圖像數(shù)據(jù)集 143
7.1.1 下載CIFAR-10 144
7.1.2 Dataset類 145
7.1.3 Dataset變換 146
7.1.4 數(shù)據(jù)歸一化 149
7.2 區(qū)分鳥和飛機 150
7.2.1 構(gòu)建數(shù)據(jù)集 151
7.2.2 一個全連接模型 152
7.2.3 分類器的輸出 153
7.2.4 用概率表示輸出 154
7.2.5 分類的損失 157
7.2.6 訓(xùn)練分類器 159
7.2.7 全連接網(wǎng)絡(luò)的局限 165
7.3 總結(jié) 167
7.4 練習(xí)題 167
7.5 本章小結(jié) 168
第8章 使用卷積進行泛化 169
8.1 卷積介紹 169
8.2 卷積實戰(zhàn) 172
8.2.1 填充邊界 173
8.2.2 用卷積檢測特征 175
8.2.3 使用深度和池化技術(shù)進一步研究 177
8.2.4 為我們的網(wǎng)絡(luò)整合一切 179
8.3 子類化nn.Module 181
8.3.1 將我們的網(wǎng)絡(luò)作為一個nn.Module 182
8.3.2 PyTorch如何跟蹤參數(shù)和子模塊 183
8.3.3 函數(shù)式API 184
8.4 訓(xùn)練我們的convnet 185
8.4.1 測量精度 187
8.4.2 保存并加載我們的模型 188
8.4.3 在GPU上訓(xùn)練 188
8.5 模型設(shè)計 190
8.5.1 增加內(nèi)存容量:寬度 191
8.5.2 幫助我們的模型收斂和泛化:正則化 192
8.5.3 深入學(xué)習(xí)更復(fù)雜的結(jié)構(gòu):深度 195
8.5.4 本節(jié)設(shè)計的比較 200
8.5.5 已經(jīng)過時了 201
8.6 總結(jié) 201
8.7 練習(xí)題 201
8.8 本章小結(jié) 202
第 2部分 從現(xiàn)實世界的圖像中學(xué)習(xí):肺癌的早期檢測
第9章 使用PyTorch來檢測癌癥 205
9.1 用例簡介 205
9.2 為一個大型項目做準備 206
9.3 到底什么是CT掃描 207
9.4 項目:肺癌的端到端檢測儀 210
9.4.1 為什么我們不把數(shù)據(jù)扔給神經(jīng)網(wǎng)絡(luò)直到它起作用呢 213
9.4.2 什么是結(jié)節(jié) 216
9.4.3 我們的數(shù)據(jù)來源:LUNA大挑戰(zhàn)賽 217
9.4.4 下載LUNA數(shù)據(jù)集 218
9.5 總結(jié) 219
9.6 本章小結(jié) 219
第 10章 將數(shù)據(jù)源組合成統(tǒng)一的數(shù)據(jù)集 220
10.1 原始CT數(shù)據(jù)文件 222
10.2 解析LUNA的標注 數(shù)據(jù) 222
10.2.1 訓(xùn)練集和驗證集 224
10.2.2 統(tǒng)一標注和候選 數(shù)據(jù) 225
10.3 加載單個CT掃描 227
10.4 使用病人坐標系定位結(jié)節(jié) 230
10.4.1 病人坐標系 230
10.4.2 CT掃描形狀和體素大小 232
10.4.3 毫米和體素地址之間的轉(zhuǎn)換 233
10.4.4 從CT掃描中取出一個結(jié)節(jié) 234
10.5 一個簡單的數(shù)據(jù)集實現(xiàn) 235
10.5.1 使用getCtRawCandidate()函數(shù)緩存候選數(shù)組 238
10.5.2 在LunaDataset.__init__()中構(gòu)造我們的數(shù)據(jù)集 238
10.5.3 分隔訓(xùn)練集和驗證集 239
10.5.4 呈現(xiàn)數(shù)據(jù) 240
10.6 總結(jié) 241
10.7 練習(xí)題 241
10.8 本章小結(jié) 242
第 11章 訓(xùn)練分類模型以檢測可疑腫瘤 243
11.1 一個基本的模型和訓(xùn)練循環(huán) 243
11.2 應(yīng)用程序的主入口點 246
11.3 預(yù)訓(xùn)練和初始化 247
11.3.1 初始化模型和優(yōu)化器 247
11.3.2 數(shù)據(jù)加載器的維護和供給 249
11.4 我們的首次神經(jīng)網(wǎng)絡(luò)設(shè)計 251
11.4.1 核心卷積 251
11.4.2 完整模型 254
11.5 訓(xùn)練和驗證模型 257
11.5.1 computeBatchLoss()函數(shù) 258
11.5.2 類似的驗證循環(huán) 260
11.6 輸出性能指標 261
11.7 運行訓(xùn)練腳本 265
11.7.1 訓(xùn)練所需的數(shù)據(jù) 266
11.7.2 插曲:enumerateWithEstimate()函數(shù) 266
11.8 評估模型:得到99.7%的正確率是否意味著我們完成了任務(wù) 268
11.9 用TensorBoard繪制訓(xùn)練指標 269
11.9.1 運行TensorBoard 269
11.9.2 增加TensorBoard對指標記錄函數(shù)的支持 272
11.10 為什么模型不學(xué)習(xí)檢測結(jié)節(jié) 274
11.11 總結(jié) 275
11.12 練習(xí)題 275
11.13 本章小結(jié) 275
第 12章 通過指標和數(shù)據(jù)增強來提升訓(xùn)練 277
12.1 高級改進計劃 278
12.2 好狗與壞狗:假陽性與假陰性 279
12.3 用圖表表示陽性與陰性 280
12.3.1 召回率是Roxie的強項 282
12.3.2 精度是Preston的強項 283
12.3.3 在logMetrics()中實現(xiàn)精度和召回率 284
12.3.4 我們的終極性能指標:F1分數(shù) 285
12.3.5 我們的模型在新指標下表現(xiàn)如何 289
12.4 理想的數(shù)據(jù)集是什么樣的 290
12.4.1 使數(shù)據(jù)看起來更理想化 292
12.4.2 使用平衡的LunaDataset與之前的數(shù)據(jù)集運行情況對比 296
12.4.3 認識過擬合 298
12.5 重新審視過擬合的問題 300
12.6 通過數(shù)據(jù)增強防止過擬合 300
12.6.1 具體的數(shù)據(jù)增強技術(shù) 301
12.6.2 看看數(shù)據(jù)增強帶來的改進 306
12.7 總結(jié) 308
12.8 練習(xí)題 308
12.9 本章小結(jié) 309
第 13章 利用分割法尋找可疑結(jié)節(jié) 310
13.1 向我們的項目添加第 2個模型 310
13.2 各種類型的分割 312
13.3 語義分割:逐像素分類 313
13.4 更新分割模型 317
13.5 更新數(shù)據(jù)集以進行分割 319
13.5.1 U-Net有非常具體的對輸入大小的要求 320
13.5.2 U-Net對三維和二維數(shù)據(jù)的權(quán)衡 320
13.5.3 構(gòu)建真實、有效的數(shù)據(jù)集 321
13.5.4 實現(xiàn)Luna2dSegmentationDataset 327
13.5.5 構(gòu)建訓(xùn)練和驗證數(shù)據(jù) 331
13.5.6 實現(xiàn)TrainingLuna2dSegmentationDataset 332
13.5.7 在GPU上增強數(shù)據(jù) 333
13.6 更新用于分割的訓(xùn)練腳本 335
13.6.1 初始化分割和增強模型 336
13.6.2 使用Adam優(yōu)化器 336
13.6.3 骰子損失 337
13.6.4 將圖像導(dǎo)入TensorBoard 340
13.6.5 更新指標日志 343
13.6.6 保存模型 344
13.7 結(jié)果 345
13.8 總結(jié) 348
13.9 練習(xí)題 348
13.10 本章小結(jié) 349
第 14章 端到端的結(jié)節(jié)分析及下一步的方向 350
14.1 接近終點線 350
14.2 驗證集的獨立性 352
14.3 連接CT分割和候選結(jié)節(jié)分類 353
14.3.1 分割 354
14.3.2 將體素分組為候選結(jié)節(jié) 355
14.3.3 我們發(fā)現(xiàn)結(jié)節(jié)了嗎?分類以減少假陽性 357
14.4 定量驗證 360
14.5 預(yù)測惡性腫瘤 361
14.5.1 獲取惡性腫瘤信息 361
14.5.2 曲線基線下的區(qū)域:按直徑分類 362
14.5.3 重用預(yù)先存在的權(quán)重:微調(diào) 365
14.5.4 TensorBoard中的輸出 370
14.6 在診斷時所見的內(nèi)容 374
14.7 接下來呢?其他靈感和數(shù)據(jù)的來源 376
14.7.1 防止過擬合:更好的正則化 377
14.7.2 精細化訓(xùn)練數(shù)據(jù) 379
14.7.3 競賽結(jié)果及研究論文 380
14.8 總結(jié) 381
14.9 練習(xí)題 382
14.10 本章小結(jié) 383
第3部分 部署
第 15章 部署到生產(chǎn)環(huán)境 387
15.1 PyTorch模型的服務(wù) 388
15.1.1 支持Flask服務(wù)的模型 388
15.1.2 我們想從部署中得到的東西 390
15.1.3 批處理請求 391
15.2 導(dǎo)出模型 395
15.2.1 PyTorch與ONNX的互操作性 396
15.2.2 PyTorch自己的導(dǎo)出:跟蹤 397
15.2.3 具有跟蹤模型的服務(wù)器 398
15.3 與PyTorch JIT編譯器交互 398
15.3.1 超越經(jīng)典Python/PyTorch的期望是什么 399
15.3.2 PyTorch作為接口和后端的雙重特性 400
15.3.3 TorchScript 400
15.3.4 為可追溯的差異編寫腳本 404
15.4 LibTorch:C++中的PyTorch 405
15.4.1 從C++中運行JITed模型 405
15.4.2 從C++ API開始 408
15.5 部署到移動設(shè)備 411
15.6 新興技術(shù):PyTorch
模型的企業(yè)服務(wù) 416
15.7 總結(jié) 416
15.8 練習(xí)題 416
15.9 本章小結(jié) 416