天天看點

《動手學深度學習》TensorFlow 2.0/PyTorch實作

機器學習AI算法工程   公衆号:datayx

由 MXNet 創始人李沐大神、Aston Zhang 等人所著的互動式書籍《動手學深度學習》推出了線上預覽版,面向在校學生、工程師和研究人員,旨在幫助讀者從入門到深入、動手學習深度學習,即使是零基礎的讀者也完全适用。

當時我們需要向使用者解釋Apache MXNet在那時的新接口Gluon。不幸的是,我們并沒有找到任何一個資源可以同時滿足以下幾點需求:

  1. 包含較新的方法和應用,并不斷更新;
  2. 廣泛覆寫現代深度學習技術并具有一定的技術深度;
  3. 既是嚴謹的教科書,又是包含可運作代碼的生動的教程。

那時,我們在部落格和GitHub上找到了大量的示範特定深度學習架構(例如用TensorFlow進行數值計算)或實作特定模型(例如AlexNet、ResNet等)的示例代碼。這些示例代碼的一大價值在于提供了教科書或論文往往省略的實作細節,比如資料的處理和運算的高效率實作。如果不了解這些,即使能将算法倒背如流,也難以将算法應用到自己的項目中去。此外,這些示例代碼還使得使用者能通過觀察修改代碼所導緻的結果變化而快速驗證想法、積累經驗。是以,我們堅信動手實踐對于學習深度學習的重要性。然而可惜的是,這些示例代碼通常側重于如何實作給定的方法,卻忽略了有關算法設計的探究或者實作細節的解釋。雖然在像Distill這樣的網站和某些部落格上出現了一些有關算法設計和實作細節的讨論,但它們常常缺少示例代碼,并通常僅覆寫深度學習的一小部分。

另外,我們欣喜地看到了一些有關深度學習的教科書不斷問世,其中最著名的要數Goodfellow、Bengio和Courville的《深度學習》。該書梳理了深度學習背後的衆多概念與方法,是一本極為優秀的教材。然而,這類資源并沒有将概念描述與實際代碼相結合,以至于有時會令讀者對如何實作它們感到毫無頭緒。除了這些以外,商業課程提供者們雖然制作了衆多的優質資源,但它們的付費門檻依然令不少使用者望而生畏。

正因為這樣,深度學習使用者,尤其是初學者,往往不得不參考來源不同的多種資料。例如,通過教科書或者論文來掌握算法及其相關數學知識,閱讀線上文檔學習深度學習架構的使用方法,然後尋找感興趣的算法在這個架構上的實作并摸索如何将它應用到自己的項目中去。如果你正親身經曆這一過程,你可能會感到痛苦:不同來源的資料有時難以互相一一對應,即便能夠對應也可能需要花費大量的精力。例如,我們需要将某篇論文公式中的數學變量與某段網上實作中的程式變量一一對應,并在代碼中找到論文可能沒交代清楚的實作細節,甚至要為運作不同的代碼安裝不同的運作環境。

針對以上存在的痛點,我們正在着手建立一個為實作以下目标的統一資源:

  1. 所有人均可在網上免費擷取;
  2. 提供足夠的技術深度,進而幫助讀者實際成為深度學習應用科學家:既了解數學原理,又能夠實作并不斷改進方法;
  3. 包含可運作代碼,為讀者展示如何在實際中解決問題。這樣不僅直接将數學公式對應成實際代碼,而且可以通過修改代碼、觀察結果而及時擷取經驗;
  4. 允許我們和整個社群不斷快速疊代内容,進而緊跟仍在高速發展的深度學習領域;
  5. 由包含有關技術細節問答的論壇作為補充,使大家可以互相答疑并交換經驗。

這些目标往往互有沖突:公式、定理和引用最容易通過LaTeX進行管理和展示,代碼自然應該用簡單易懂的Python描述,而網頁本身應該是一堆HTML及配套的CSS和JavaScript。此外,我們希望這個資源可以作為可執行代碼、實體書以及網站。然而,目前并沒有任何工具可以完美地滿足以上所有需求。

是以,我們不得不自己來內建這樣的一個工作流。我們決定在GitHub上分享源代碼并允許送出編輯,通過Jupyter記事本來整合代碼、公式、文本、圖檔等,使用Sphinx作為渲染引擎來生成不同格式的輸出,并使用Discourse作為論壇。雖然我們的系統尚未完善,但這些選擇在互有沖突的目标之間取得了較好的折中。這很可能是使用這種內建工作流釋出的第一本書。

書中所有的代碼執行結果都是自動生成的,任何改動都會觸發對書中每一段代碼的測試,以保證讀者在動手實踐時能複現結果。

《動手學深度學習》TensorFlow 2.0/PyTorch實作

包含code和docs兩個檔案夾(外加一些資料存放在data中)。其中code檔案夾就是每章相關jupyter notebook代碼(基于TensorFlow2);docs檔案夾就是markdown格式的《動手學深度學習》書中的相關内容。

相關代碼,擷取方式:

關注微信公衆号 datayx  然後回複 動手深度學習 即可擷取。

目錄

  • 簡介
  • 閱讀指南
  • 1. 深度學習簡介
  • 2. 預備知識
  • 2.1 環境配置
  • 2.2 資料操作
  • 2.3 自動求梯度
  • 3. 深度學習基礎
  • 3.1 線性回歸
  • 3.2 線性回歸的從零開始實作
  • 3.3 線性回歸的簡潔實作
  • 3.4 softmax回歸
  • 3.5 圖像分類資料集(Fashion-MNIST)
  • 3.6 softmax回歸的從零開始實作
  • 3.7 softmax回歸的簡潔實作
  • 3.8 多層感覺機
  • 3.9 多層感覺機的從零開始實作
  • 3.10 多層感覺機的簡潔實作
  • 3.11 模型選擇、欠拟合和過拟合
  • 3.12 權重衰減
  • 3.13 丢棄法
  • 3.14 正向傳播、反向傳播和計算圖
  • 3.15 數值穩定性和模型初始化
  • 3.16 實戰Kaggle比賽:房價預測
  • 4. 深度學習計算
  • 4.1 模型構造
  • 4.2 模型參數的通路、初始化和共享
  • 4.3 模型參數的延後初始化
  • 4.4 自定義層
  • 4.5 讀取和存儲
  • 4.6 GPU計算
  • 5. 卷積神經網絡
  • 5.1 二維卷積層
  • 5.2 填充和步幅
  • 5.3 多輸入通道和多輸出通道
  • 5.4 池化層
  • 5.5 卷積神經網絡(LeNet)
  • 5.6 深度卷積神經網絡(AlexNet)
  • 5.7 使用重複元素的網絡(VGG)
  • 5.8 網絡中的網絡(NiN)
  • 5.9 含并行連結的網絡(GoogLeNet)
  • 5.10 批量歸一化
  • 5.11 殘差網絡(ResNet)
  • 5.12 稠密連接配接網絡(DenseNet)
  • 6. 循環神經網絡
  • 6.1 語言模型
  • 6.2 循環神經網絡
  • 6.3 語言模型資料集(周傑倫專輯歌詞)
  • 6.4 循環神經網絡的從零開始實作
  • 6.5 循環神經網絡的簡潔實作
  • 6.6 通過時間反向傳播
  • 6.7 門控循環單元(GRU)
  • 6.8 長短期記憶(LSTM)
  • 6.9 深度循環神經網絡
  • 6.10 雙向循環神經網絡
  • 7. 優化算法
  • 7.1 優化與深度學習
  • 7.2 梯度下降和随機梯度下降
  • 7.3 小批量随機梯度下降
  • 7.4 動量法
  • 7.5 AdaGrad算法
  • 7.6 RMSProp算法
  • 7.7 AdaDelta算法
  • 7.8 Adam算法
  • 8. 計算性能
  • 8.1 指令式和符号式混合程式設計
  • 8.2 異步計算
  • 8.3 自動并行計算
  • 8.4 多GPU計算
  • 9. 計算機視覺
  •  9.12 實戰Kaggle比賽:圖像分類(CIFAR-10)
  •  9.13 實戰Kaggle比賽:狗的品種識别(ImageNet Dogs)
  • 9.11 樣式遷移
  •  9.10 全卷積網絡(FCN)
  • 9.8 區域卷積神經網絡(R-CNN)系列
  • 9.9 語義分割和資料集
  •  9.7 單發多框檢測(SSD)
  • 9.1 圖像增廣
  • 9.2 微調
  • 9.3 目标檢測和邊界框
  • 9.4 錨框
  • 9.5 多尺度目标檢測
  • 9.6 目标檢測資料集(皮卡丘)
  • 10. 自然語言處理
  • 10.1 詞嵌入(word2vec)
  • 10.2 近似訓練
  • 10.3 word2vec的實作
  • 10.4 子詞嵌入(fastText)
  • 10.5 全局向量的詞嵌入(GloVe)
  • 10.6 求近義詞和類比詞
  • 10.7 文本情感分類:使用循環神經網絡
  • 10.8 文本情感分類:使用卷積神經網絡(textCNN)
  • 10.9 編碼器—解碼器(seq2seq)
  • 10.10 束搜尋
  • 10.11 注意力機制
  • 10.12 機器翻譯

機器學習算法AI大資料技術

 搜尋公衆号添加: datanlp

長按圖檔,識别二維碼

深度學習、機器學習、資料分析、python

繼續閱讀