前言
❁ 為什麼寫這本書
2016年是屬於TensorFlow的,憑藉Google的大力推廣,TensorFlow 佔據各大媒體的頭條。2017年年初,PyTorch從天而降吸引研究人員相當大的關注,PyTorch簡潔優雅的設計、統一好用的介面、追風逐電的速度和變化無方的靈活性給人留下深刻的印象。
身為2017 年剛剛發佈的深度學習架構,研究人員所能取得的學習資料有限,中文資料更是少。筆者長期關注PyTorch 發展,經常在討論區上幫助PyTorch 新手解決問題,在平時的科學研究中利用PyTorch 進行各方面的研究,具有豐富的使用經驗。看到國內的使用者對PyTorch 十分有興趣,迫切需要一本能夠全面說明PyTorch 的書籍,於是本書就這麼誕生了。
❁ 本書的結構
本書分為兩部分:第2~5 章主要介紹PyTorch 的基礎知識。
■ 第2 章介紹PyTorch 的安裝和設定學習環境。同時以最概要的方式介紹PyTorch 的主要內容,讓讀者對PyTorch 有一個大概的整體印象。
■ 第3 章介紹PyTorch 中多維陣列Tensor 和動態圖autograd/Variable 的使用,並配以實例,讓讀者分別使用Tensor 和autograd 實現線性回歸,比較二者的不同點。本章還對Tensor 的底層設計,以及autograd 的原理進行了分析,給讀者以更全面實際的說明。
■ 第4章介紹PyTorch中神經網路模組nn的基礎用法,同時說明了神經網路中的「層」、「損失函數」、「最佳化器」等,最後帶領讀者用不到50 行的程式架設出曾奪得ImageNet 冠軍的ResNet。
■ 第5章介紹PyTorch中資料載入、GPU加速和視覺化等相關工具。
第6~10 章主要介紹實戰案例。
■ 第6 章是承上啟下的一章,目標不是教會讀者新函數、新知識,而是結合Kaggle 中一個經典的比賽,實現一個深度學習中比較簡單的影像二分類問題。在實現的過程中,帶領讀者複習前5 章的知識,並提出程式標準以合理地組織程式和程式,使程式更讀取、可維護。第6 章還介紹在PyTorch 中如何進行debug。
■ 第7章為讀者說明目前最火爆的產生對抗網路(GAN),帶領讀者從零開始實現一個動漫圖示產生器,能夠利用GAN 產生風格多變的動漫圖示。
■ 第8章為讀者說明風格移轉的相關知識,並帶領讀者實現風格移轉網路,將自己的照片變成「高大上」的名畫。
■ 第9章為讀者說明一些自然語言處理的基礎知識,並說明CharRNN的原理。然後利用其收集幾萬首唐詩,訓練出一個可以自動寫詩歌的小程式。這個小程式可以控制產生詩歌的格式和意境,還能產生藏頭詩。
■ 第10章介紹影像描述工作,並以最新的AI Challenger比賽的資料為例,帶領讀者實現一個可以進行簡單影像描述的小程式。
第1 章和第11 章是本書的首章和末章,第1 章介紹PyTorch 的優勢,以及和市面上其他幾款架構的比較。第11 章是對本書的歸納,以及對PyTorch 不足之處的思考,同時對讀者未來的學習提出建議。
❁ 關於程式
本書的所有程式都開放原始碼在GitHub【https://github.com/chenyuntc/pytorch-book】上,其中:
■ 第2~5章的程式以Jupyter Notebook形式提供,讀者可以在自己的電腦上互動式地修改執行它。
■ 第6~10章的程式以單獨的程式列出,每個函數的作用與細節在程式中有大量的註釋。
本書的程式, 在最新版的PyTorch 0.2 上執行, 同時支援Python 2 和Python 3,其中:
■ 前5章的程式同時在Python 2.7和Python 3.5上驗證,並獲得最後結果。
■ 第6~10 章的程式,主要在Python 2.7 上執行並獲得最後結果,同時在Python 3.5 上測試未顯示出錯。
❁ 適讀人群
學習本書需要讀者具備以下基礎知識:
■ 了解Python的基礎語法,掌握基礎的Python使用方法。
■ 有一定深度學習基礎,了解反向傳播、旋積神經網路等基礎知識,但並不要求深入了解。
■ 具備梯度、導數等高中數學基礎知識。
以下知識不是必需的,但最好了解:
■ numpy的使用。
■ 深度學習的基本流程或其他深度學習架構的使用。
本書不適合哪些讀者:
■ 沒有任何深度學習基礎的使用者。
■ 沒有Python基礎的使用者。
■ 只能使用Windows的使用者。
❁ 本書約定
在本書中,筆者是本書編著者的自稱,作者指的是軟體、論文等的作者,
讀者指閱讀本書的你。
本書前5 章的程式由Jupyter Notebook 轉換而來,其中:
■ In後面跟著的是輸入的程式。
■ Out是指程式的執行結果,執行結果取決於In的最後一行。
■ Print後面跟著程式的列印輸出內容,只有在In程式中呼叫了print函數/敘述才會有Print 輸出。
■ Jupyter會自動輸出Image物件和matplotlib視覺化結果,所以書中以「程式輸出」命名的圖片都來自Jupyter 的程式輸出。這些圖片的說明在程式註釋中。
❁ 如何使用本書
本書第2 章是PyTorch 快速入門,第3~5 章是對這些內容的詳細深入介
紹。第6 章是一個簡單而完整的深度學習案例。
如果你是經驗豐富的研究人員,之前對PyTorch 十分熟悉,對本書的某些實例比較有興趣,那麼你可以跳過前5 章,直接閱讀第6 章,了解這些實例的程式設計與檔案組織安排,然後閱讀對應的實例。
如果你是初學者,想以最快的速度掌握PyTorch 並將PyTorch 應用到實際專案中,建議你花2~3 小時閱讀2.2 節的相關內容。如果你需要深入了解某部分的內容,可以閱讀對應章節。
如果你是初學者,想完整全面地掌握PyTorch,建議你:
■ 先閱讀第1~5章,了解PyTorch的各個基礎知識。
■ 再閱讀第6章,了解PyTorch實作中的技巧。
■ 最後從第7~10章挑選出有興趣的實例,動手實作。
最後,希望讀者在閱讀,儘量結合本書的搭配程式閱讀、修改、執行之。
❁ 致謝
杜玉姣同學在我撰寫本書的時候,提供許多建議,並協助審稿部分章節,在此特向她表示謝意。本書編輯鄭柳潔給予很大的幫助,在此特向她致謝。感謝我的家人一直以來對我的支援,感謝我的導師肖波副教授對我的指導。感謝我的同學、師弟師妹們,他們在使用PyTorch 中遇到很多問題,給我許多回饋意見。
由於筆者水準所限,書中難免有錯誤和不當之處,歡迎讀者批評指正。
實際意見可以發表在GitHub 上的issue(https://github.com/chenyuntc/pytorch-book/issues)中,或透過電子郵件(i@knew.be)聯繫筆者。