- 學習基本PyTorch語法和設計模式。
- 創(chuàng)建定制模型和數(shù)據(jù)變換。
- 使用GPU和TPU訓練和部署模型。
- 訓練和測試一個深度學習分類器。
- 使用優(yōu)化和分布式訓練加速訓練。
- 利用PyTorch庫和PyTorch生態(tài)系統(tǒng)。
這本簡明便捷的參考手冊將讓你充分掌握最流行的深度學習研究和開發(fā)框架之一:PyTorch。本書作者清晰地介紹了語法和設計模式,并提供了代碼示例,可以加快你的開發(fā),減少搜尋答案花費的時間。
科學家、機器學習工程師和軟件開發(fā)人員可以從中找到簡明的結構化PyTorch代碼,這涵蓋神經(jīng)網(wǎng)絡開發(fā)的每一個步驟,包括加載數(shù)據(jù)、定制訓練循環(huán)、模型優(yōu)化,以及GPU/TPU加速。另外還能很快學會如何使用AWS、Google Cloud或Azure將代碼部署到生產(chǎn)環(huán)境,以及如何將機器學習模型部署到移動和邊緣設備。
前言
這是一個讓人歡欣鼓舞的時代!有些人很幸運,經(jīng)歷了技術的一個個巨大進步個人計算機的發(fā)明、互聯(lián)網(wǎng)的誕生,手機的廣泛使用,以及社交媒體的出現(xiàn)。如今,人工智能領域正在取得重大突破!
注視這一變化并成為這個變化的一部分著實令人興奮。我想我們才剛剛起步,想到未來十年世界將會發(fā)生怎樣的變化,簡直無法想象。我們生活在這樣的時代,能夠參與人工智能的蓬勃擴張,這真是太棒了!
毫無疑問,PyTorch 促使深度學習和人工智能領域取得了一些巨大的進步。PyTorch 可以免費下載和使用,任何人只要有計算機或者能上網(wǎng)就可以開展人工智能實驗。除了類似本書的比較全面的參考資料,還有很多免費和便宜的培訓課程、博客文章和教程可以幫助你。任何人都可以使用PyTorch 著手研究機器學習和人工智能。
本書面向的讀者對象
這本書既面向初學者,又面向對機器學習和人工智能感興趣的高級用戶。如果你有編寫Python 代碼的一些經(jīng)驗,對數(shù)據(jù)科學和機器學習有基本的了解,這會很有幫助。
如果你剛接觸機器學習,這本書會幫助你了解PyTorch 的基礎知識,并提供一些簡單的示例。如果你使用過其他框架,如TensorFlow、Caffe2 或MXNet,這本書會幫助你熟悉PyTorch API 及其編程思維,來拓展你的技能。如果你使用過PyTorch,這本書會幫助你擴充一些高級主題的知識,如加速和優(yōu)化,并提供快速參考資源,幫助你在日常開發(fā)中使用PyTorch。
為什么寫這本書
學習和掌握PyTorch 可能很令人興奮。有太多的東西需要探索!我剛開始學習PyTorch 時,很希望有一個資源能教會我一切。我希望它能提供一個很好的高層概述,使我了解PyTorch 提供了什么,還希望它能提供一些示例,在我需要更深入地研究時能提供足夠多的詳細信息。
關于PyTorch 有一些非常好的書和課程,不過它們通常側重于張量和深度學習模型的訓練。PyTorch 在線文檔也很好,提供了大量詳細信息和示例。不過,我發(fā)現(xiàn)使用文檔往往很麻煩。我必須不停地點擊來學習,或者用Google 搜索我需要知道的知識。我希望書桌上能有一本合適的書,在我編寫代碼時可以查閱和參考。
我的目標是讓這成為你的終極PyTorch 參考書。除了通讀全書,對可用的PyTorch 資源有一個高層認識,我還希望你能重點查閱關鍵的部分來完成你的開發(fā)工作,并把這本書留在案頭。這樣一來,如果你忘記了某個內(nèi)容,就能立即得到答案。如果你更喜歡電子書或在線書,還可以在線加書簽。不論你如何使用這本書,我希望它能幫助你用PyTorch 創(chuàng)造出令人驚嘆的新技術!
本書組織
如果你剛開始學習PyTorch,應當從第1 章開始,按順序閱讀每一章。這些章節(jié)將從入門級逐步轉入高級主題。如果你對PyTorch 已經(jīng)有一些經(jīng)驗,可能想直接跳到你最感興趣的主題。不要忘記查看有關PyTorch 生態(tài)系統(tǒng)的第8 章。你肯定能發(fā)現(xiàn)一些新東西!
本書的組織結構如下:
第1 章對PyTorch 提供了一個簡要介紹,將幫助你建立開發(fā)環(huán)境,并提供了一個有趣的例子讓你自己嘗試。
第2 章介紹張量,這是PyTorch 的基本構建模塊,它是PyTorch 中所有一切的基礎。
第3 章全面介紹了如何使用PyTorch 完成深度學習,第4 章提供了一些示例參考設計,以便你了解PyTorch 的實際使用。
第5 章和第6 章介紹更高級的主題。第5 章介紹如何為你自己的工作定制PyTorch 組件。第6 章則介紹如何加速訓練和優(yōu)化你的模型。
第7 章介紹如何通過本地機器、云服務器和移動或邊緣設備將PyTorch 部署到生產(chǎn)環(huán)境。
第8 章介紹PyTorch 生態(tài)系統(tǒng),描述流行的包,并列出另外一些培訓資源,來指導你下一步的工作。
本書使用約定
本書使用以下排版約定:
斜體(Italic)
表示新術語、URL、email 地址、文件名和文件擴展名。
定寬字體(Constant width)
用于程序代碼清單,以及在段落中用來指示程序元素,如變量或函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關鍵字。
定寬粗體(Constant width bold)
表示要由用戶鍵入的命令或其他文字。另外,在表格中粗體還用來強調(diào)函數(shù)。
定寬斜體(Constant width italic)
表示用定寬斜體顯示的文字要替換為用戶提供的值或由上下文確定的值。另外,表格中用斜體顯示的變換目前TorchScript 還不支持。
使用代碼示例
這本書的補充材料(代碼示例,練習等)可以從https://github.com/joe-papa/pytorch-book 下載。
如果你有技術問題,或者使用代碼示例時遇到問題,請發(fā)送電子郵件至bookquestions@oreilly.com。
本書的目的是要幫助你完成工作。一般來講,如果書中提供了示例代碼,你可以在你的程序和文檔中使用這些示例代碼,不需要聯(lián)系我們來得到許可,除非你直接復制了大部分的代碼。例如,如果你在編寫一個程序,使用了本書中的多段代碼,這并不需要得到許可。但是出售或發(fā)行OReilly 書的示例代碼則需要得到許可;卮饐栴}時如果引用了這本書的文字和示例代碼,這不需要得到許可。但是如果你的產(chǎn)品文檔借用了本書中的大量示例代碼,則需要得到許可。
我們希望但不嚴格要求標明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如,PyTorch Pocket Reference by Joe Papa (OReilly). Copyright 2021 Mobile Insights Technology Group, LLC, 978-1-492-09000-7。
如果你認為你在使用代碼示例時超出了合理使用范圍或者上述許可范圍,可以隨時聯(lián)系我們:permissions@oreilly.com。
OReilly 在線學習平臺(OReilly Online Learning)
近40 年來,OReilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。
我們有一群獨家專家和創(chuàng)新者,他們通過圖書、文章、會議和在線學習平臺分享知識和技術。OReilly 的在線學習平臺提供按需訪問的直播培訓課程、詳細的學習路徑、交互式編程環(huán)境,以及由OReilly 和其他200 多家出版社出版的書籍和視頻。詳情請訪問http://oreilly.com。
聯(lián)系方式
請將你對本書的評價和問題發(fā)給出版社:
美國:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)
針對這本書,我們還建有一個網(wǎng)頁,列出了有關勘誤、示例和其他信息?梢酝ㄟ^以下地址訪問這個頁面:https://oreil.ly/PyTorch-pocket。
如果對這本書有什么意見,或者詢問技術上的問題,請發(fā)送電子郵件至errata@oreilly.com.cn。
要了解關于我們的圖書和課程的新聞和信息,請訪問我們的網(wǎng)站:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的YouTube:http://www.youtube.com/oreillymedia。
致謝
作為一個讀者,每當我看到其他作者的致謝時都很有感觸。寫一本書不是件簡單的任務,特別是寫一本好書需要很多人的支持。閱讀這些致謝會不斷提醒我們:僅憑我們自己是無法完成這個任務的。
要感謝我的朋友Matt Kirk 的支持和鼓勵,他是我多年前在OReilly 會議上認識的。他對個人開發(fā)的熱情激勵著他不斷創(chuàng)作圖書和課程,幫助其他人在個人和職業(yè)領域充分發(fā)揮潛能。疫情期間,我們每周的Zoom 聊天和自助項目確實對我很有幫助,使我能保持理智。沒有Matt,就不可能有這本書。
我要感謝Rebecca Novack 建議啟動這個項目,并給了我一個機會,還要感謝OReilly 的工作人員讓這個項目成為現(xiàn)實。
寫一本書需要付出努力,不過要寫一本好書,還需要有關心讀者的敬業(yè)的審校人員。我要感謝Mike Drob、Axel Sirota 和Jeff Bleiel 花時間審閱這本書,并提出了無數(shù)的建議。由于Mike 的建議,我增加了很多原本可能忽略的實用資源。他確保我們使用最先進的工具和最佳實踐,這是在線文檔中找不到的。Axel 對細節(jié)的關注真是令人難以置信。非常感謝他的鼓勵和努力,感謝他審閱了本書中的代碼和技術細節(jié)。Jeff 是一個了不起的編輯。非常感謝他對這本書的順序和組織提出的建議。他的幫助使我成為一個更好的作者。
PyTorch 是一個真正的社區(qū)項目。非常感謝Facebook 的人員以及超過1700 位開發(fā)這個機器學習框架的貢獻者。特別要感謝那些創(chuàng)建文檔和教程的人,這些文檔和教程能幫助像我這樣的人快速學習PyTorch。
對我?guī)椭畲蟮娜税⊿uraj Subramanian、Seth Juarez、Cassie Breviu、Dmitry Soshnikov、Ari Bornstein、Soumith Chintala、Justin Johnson、Jeremy Howard、Rachel Thomas、Francisco Ingham、Sasank Chilamkurthy、Nathan Inkawhich、Sean Robertson、Ben Trevett、Avinash Sajjanshetty、James Reed、Michael Suo、Michela Paganini、Shen Li、Seb Arnold、Rohan Varma、Pritam Damania、Jeff Tang,以及無數(shù)研究PyTorch 主題的博客博主和油管主播。
非常感謝Manbir Gulati 介紹我認識了PyTorch,還要感謝Rob Miller 給我機會領導使用PyTorch 完成人工智能項目。很高興與我的朋友Isaac Privitera 分享這本書中的深度學習想法。當然,如果沒有我母親Grace 的辛勤工作和奉獻,我不可能取得任何成就,是她給了我和我哥哥生命,讓我們成長。每天我都很想念她。
特別感謝我的哥哥Vinnie,他對我的家庭項目提供了很大幫助,讓我有更多的時間寫作。我要感謝我的繼父Lou,感謝他在我寫這本書時給予的鼓勵。還要感謝我的孩子們,Savannah、Caroline 和George,感謝他們在爸爸工作時的耐心和理解。
最后,我要感謝我的妻子Emily。在我的生命里,她一直支持著我的想法和夢想。當然,當我著手寫這本書時,她又一次成為我的依靠。在疫情期間,照顧我們的三個孩子并承擔新的責任實在是一項艱巨的任務。
盡管如此,她一直是我完成寫作必不可少的支撐。事實上,寫這本書的時候,我們發(fā)現(xiàn)將迎來我們的第四個孩子!我的妻子總是用微笑和一句玩笑(總是我出錢)迎接一切,這讓我更愛她。
Joe Papa在研究和開發(fā)領域有超過25年的經(jīng)驗,是TeachMe.AI的創(chuàng)始人。他擁有電機工程碩士學位,并在Booz Allen Hamilton和Perspecta Labs領導使用PyTorch的AI研究團隊。Joe指導過成百上千的數(shù)據(jù)科學家,并在Udemy教過全世界超過6000名學生。
目錄
前言 . 1
第1 章 PyTorch 簡介 9
1.1 PyTorch 是什么? .9
1.2 為什么使用PyTorch? .10
1.3 新手指南 12
1.3.1 在Google Colaboratory 中運行 13
1.3.2 在本地計算機上運行 .16
1.3.3 在云平臺上運行 17
1.3.4 驗證你的PyTorch 環(huán)境 20
1.4 一個有趣的例子 20
第2 章 張量 29
2.1 張量是什么? .30
2.1.1 簡單CPU 示例 .30
2.1.2 簡單GPU 示例 .31
2.1.3 在CPU 和GPU 之間移動張量 .32
2.2 創(chuàng)建張量 33
2.2.1 張量屬性37
2.2.2 數(shù)據(jù)類型38
2.2.3 由隨機樣本創(chuàng)建張量 .40
2.2.4 創(chuàng)建類似其他張量的張量 42
2.3 張量操作 42
2.3.1 張量索引、切片、合并和拆分 .43
2.3.2 張量數(shù)學運算 47
2.3.3 自動微分(Autograd) .54
第3 章 使用PyTorch 的深度學習開發(fā) . 57
3.1 完整過程 58
3.2 數(shù)據(jù)準備 60
3.2.1 數(shù)據(jù)加載60
3.2.2 數(shù)據(jù)變換65
3.2.3 數(shù)據(jù)批處理 .69
3.2.4 一般數(shù)據(jù)準備(torch.utils.data) 70
3.3 模型開發(fā) 74
3.3.1 模型設計75
3.3.2 訓練 90
3.3.3 驗證 98
3.3.4 測試 .102
3.4 模型部署 .103
3.4.1 保存模型104
3.4.2 部署到PyTorch Hub 105
3.4.3 部署到生產(chǎn)環(huán)境 106
第4 章 神經(jīng)網(wǎng)絡開發(fā)參考設計 107
4.1 使用遷移學習完成圖像分類 .108
4.1.1 數(shù)據(jù)處理108
4.1.2 模型設計 111
4.1.3 訓練和驗證 113
4.1.4 測試和部署 115
4.2 用Torchtext 完成情感分析 117
4.2.1 數(shù)據(jù)處理 117
4.2.2 模型設計123
4.2.3 訓練和驗證 125
4.2.4 測試和部署 127
4.3 生成式學習用DCGAN 生成Fashion-MNIST 圖像 129
4.3.1 數(shù)據(jù)處理130
4.3.2 模型設計132
4.3.3 訓練 .135
4.3.4 測試和部署 140
第5 章 定制PyTorch 143
5.1 定制層和激活函數(shù) .144
5.1.1 定制層示例(Complex Linear) 146
5.1.2 定制激活示例(Complex ReLU) 150
5.2 定制模型架構 151
5.3 定制損失函數(shù) 154
5.4 定制優(yōu)化器算法 .156
5.5 定制訓練、驗證和測試循環(huán) .160
第6 章 PyTorch 加速和優(yōu)化 . 165
6.1 TPU 上使用PyTorch 166
6.2 (單機)多個GPU 上使用PyTorch .170
6.2.1 數(shù)據(jù)并行處理 .170
6.2.2 模型并行處理 .175
6.2.3 結合數(shù)據(jù)并行處理和模型并行處理.177
6.3 (多機)分布式訓練 180
6.4 模型優(yōu)化 .182
6.4.1 超參數(shù)調(diào)優(yōu) 182
6.4.2 量化 .190
6.4.3 剪枝 .194
第7 章 PyTorch 部署到生產(chǎn)環(huán)境 201
7.1 PyTorch 部署工具和庫 202
7.1.1 通用示例模型 .203
7.1.2 Python API 204
7.1.3 TorchScript 205
7.1.4 TorchServe 209
7.1.5 ONNX .218
7.1.6 Mobile 庫 219
7.2 部署到Flask 應用 221
7.3 Colab Flask 應用 .224
7.4 用TorchServe 部署到云227
7.5 Docker 快速入門.227
7.6 部署到移動和邊緣設備 229
7.6.1 iOS229
7.6.2 Android 232
7.6.3 其他邊緣設備 .236
第8 章 PyTorch 生態(tài)系統(tǒng)和其他資源 239
8.1 PyTorch 生態(tài)系統(tǒng) 240
8.2 面向圖像和視頻的Torchvision 248
8.2.1 數(shù)據(jù)集和I/O249
8.2.2 模型 .251
8.2.3 變換、操作和實用工具 .253
8.3 用于NLP 的Torchtext 261
8.3.1 創(chuàng)建一個數(shù)據(jù)集對象 261
8.3.2 預處理數(shù)據(jù) 262
8.3.3 創(chuàng)建一個Dataloader 批處理 263
8.3.4 數(shù)據(jù)(torchtext.data) 264
8.3.5 數(shù)據(jù)集(torchtext.datasets) 265
8.3.6 詞匯表(torchtext.vocab) 268
8.4 用于可視化的TensorBoard 269
8.4.1 SCALARS 顯示學習曲線 .272
8.4.2 GRAPHS 顯示模型架構 273
8.4.3 IMAGES、TEXT 和PROJECTOR 顯示數(shù)據(jù) .274
8.4.4 DISTRIBUTIONS 和HISTOGRAMS 顯示權重分布 .275
8.4.5 HPARAMS 顯示超參數(shù) .276
8.4.6 TensorBoard API 277
8.5 Papers with Code 280
8.6 其他PyTorch 資源 .280
8.6.1 教程 .281
8.6.2 圖書 .283
8.6.3 在線課程和現(xiàn)場培訓 284