深度學習入門2:自製框架

深度學習入門2:自製框架

《深度學習入門2:自製框架》是2023年人民郵電出版社出版的圖書。作者是齋藤康毅。

基本介紹

  • 中文名:深度學習入門2:自製框架
  • 作者:[日]齋藤康毅
  • 譯者:鄭明智
  • 出版社:人民郵電出版社
  • 頁數:520 頁
  • ISBN:9787115607515
  • 類別:深度學習
  • 原作品:ゼロから作るDeep Learning ❸ ——フレームワーク編
  • 定價:89.00 元
  • 開本:32 開
  • 裝幀:平裝
內容簡介,作者簡介,圖書目錄 ,

內容簡介

◎ 編輯推薦
• 簡明易懂,講解詳細
本書延續前作的行文風格,採用通俗的語言和大量直觀的示意圖詳細講解,幫助讀者加深對PyTorch、TensorFlow和Chainer等現代深度學習框架的理解,進一步鞏固Python編程和軟體開發的相關知識。
• 通過“從零創建”,剖析深度學習框架機制
本書會從零創建一個深度學習框架,讓讀者在運行程式的過程中了解深度學習框架中蘊藏的技術與機制。通過這樣的體驗,讀者可了解到深度學習框架的本質。
• 增量開發
本書將繁雜的深度學習框架的創建工作分為60個步驟完成,內容循序漸進,讀者可在一步步的實踐過程中獲得正向的反饋結果,激發學習動力。
◎ 內容簡介
深度學習框架中蘊藏著驚人的技術和有趣的機制,本書旨在揭開這些技術和機制的神秘面紗,幫助讀者正確理解技術,體會它們的有趣之處。為此,本書會帶領讀者從零開始創建一個深度學習框架——DeZero。
DeZero 是本書原創的框架,它用最少的代碼實現了現代深度學習框架的功能。本書分60 個步驟來完成這個框架,在此過程中,讀者會加深對PyTorch、TensorFlow 和Chainer 等現代深度學習框架的理解,看清深度學習框架的本質。
本書沿襲《深度學習入門:基於Python 的理論與實現》的風格,語言通俗,代碼簡潔,講解詳細。在自製框架的過程中,讀者還能進一步鞏固Python 編程和軟體開發相關的知識。 本書適合對深度學習框架感興趣的讀者閱讀。

作者簡介

齋藤康毅
1984年生於日本長崎縣,東京工業大學畢業,並完成東京大學研究生院課程。目前在某企業從事人工智慧相關的研究和開發工作。著有《深度學習入門:基於Python的理論與實現》,同時也是Introducing Python、Python in Practice、The Elements of Computing Systems、Building Machine Learning Systems with Python的日文版譯者。

圖書目錄

前言
第1階段 自動微分 1
步驟1 作為“箱子”的變數 3
1.1 什麼是變數 3
1.2 實現Variable類 4
1.3 (補充)NumPy的多維數組 6
步驟2 創建變數的函式 8
2.1 什麼是函式 8
2.2 Function類的實現 9
2.3 使用Function類 10
步驟3 函式的連續調用 13
3.1 Exp函式的實現 13
3.2 函式的連續調用 14
步驟4 數值微分 16
4.1 什麼是導數 16
4.2 數值微分的實現 17
4.3 複合函式的導數 20
4.4 數值微分存在的問題 21
步驟5 反向傳播的理論知識 22
5.1 鏈式法則 22
5.2 反向傳播的推導 23
5.3 用計算圖表示 25
步驟6 手動進行反向傳播 27
6.1 Variable類的功能擴展 27
6.2 Function類的功能擴展 28
6.3 Square類和Exp類的功能擴展 28
6.4 反向傳播的實現 29
步驟7 反向傳播的自動化 32
7.1 為反向傳播的自動化創造條件 33
7.2 嘗試反向傳播 36
7.3 增加backward方法 38
步驟8 從遞歸到循環 40
8.1 現在的Variable類 40
8.2 使用循環實現 41
8.3 代碼驗證 42
步驟9 讓函式更易用 43
9.1 作為Python函式使用 43
9.2 簡化backward方法 45
9.3 只支持ndarray 46
步驟10 測試 50
10.1 Python的單元測試 50
10.2 square函式反向傳播的測試 52
10.3 通過梯度檢驗來自動測試 53
10.4 測試小結 54
第2階段 用自然的代碼表達 59
步驟11 可變長參數(正向傳播篇) 61
11.1 修改Function類 62
11.2 Add類的實現 64
步驟12 可變長參數(改進篇) 65
12.1 第1項改進:使函式更容易使用 65
12.2 第2項改進:使函式更容易實現 67
12.3 add函式的實現 69
步驟13 可變長參數(反向傳播篇) 70
13.1 支持可變長參數的Add類的反向傳播 70
13.2 修改Variable類 71
13.3 Square類的實現 73
步驟14 重複使用同一個變數 75
14.1 問題的原因 76
14.2 解決方案 77
14.3 重置導數 79
步驟15 複雜的計算圖(理論篇)81
15.1 反向傳播的正確順序 82
15.2 當前的DeZero 84
15.3 函式的優先權 87
步驟16 複雜的計算圖(實現篇)88
16.1 增加“輩分”變數 88
16.2 按照“輩分”順序取出元素 90
16.3 Variable類的backward 92
16.4 代碼驗證 93
步驟17 記憶體管理和循環引用 97
17.1 記憶體管理 97
17.2 引用計數方式的記憶體管理 98
17.3 循環引用 100
17.4 weakref模組 102
17.5 代碼驗證 104
步驟18 減少記憶體使用量的模式 106
18.1 不保留不必要的導數 106
18.2 回顧Function類 109
18.3 使用Confifig類進行切換 110
18.4 模式的切換 111
18.5 使用with語句切換 112
步驟19 讓變數更易用 116
19.1 命名變數 116
19.2 實例變數ndarray 117
19.3 len函式和print函式 119
步驟20 運算符重載(1)122
20.1 Mul類的實現 122
20.2 運算符重載 125
步驟21 運算符重載(2)128
21.1 與ndarray一起使用 128
21.2 與flfloat和int一起使用 130
21.3 問題1:左項為flfloat或int的情況 131
21.4 問題2:左項為ndarray實例的情況 133
步驟22 運算符重載(3)134
22.1 負數 135
22.2 減法 136
22.3 除法 138
22.4 冪運算 139
步驟23 打包 141
23.1 檔案結構 142
23.2 將代碼移到核心類 142
23.3 運算符重載 144
23.4 實際的_ _init_ _.py檔案 146
23.5 導入dezero 147
步驟24 複雜函式的求導 149
24.1 Sphere函式 150
24.2 matyas函式 151
24.3 GoldsteinPrice函式 152
第3階段 實現高階導數 161
步驟25 計算圖的可視化(1) 163
25.1 安裝Graphviz 163
25.2 使用DOT語言描述圖形 165
25.3 指定節點屬性 165
25.4 連線節點 167
步驟26 計算圖的可視化(2)169
26.1 可視化代碼的使用示例 169
26.2 從計算圖轉換為DOT語言 171
26.3 從DOT語言轉換為圖像 174
26.4 代碼驗證 176
步驟27 泰勒展開的導數 178
27.1 sin函式的實現 178
27.2 泰勒展開的理論知識 179
27.3 泰勒展開的實現 180
27.4 計算圖的可視化 182
步驟28 函式最佳化 184
28.1 Rosenbrock函式 184
28.2 求導 185
28.3 梯度下降法的實現 186
步驟29 使用牛頓法進行最佳化(手動計算)190
29.1 使用牛頓法進行最佳化的理論知識 191
29.2 使用牛頓法實現最佳化 195
步驟30 高階導數(準備篇) 197
30.1 確認工作①:Variable實例變數 197
30.2 確認工作②:Function類 199
30.3 確認工作③:Variable類的反向傳播 201
步驟31 高階導數(理論篇) 204
31.1 在反向傳播時進行的計算 204
31.2 創建反向傳播的計算圖的方法 206
步驟32 高階導數(實現篇) 209
32.1 新的DeZero 209
32.2 函式類的反向傳播 210
32.3 實現更有效的反向傳播(增加模式控制代碼)211
32.4 修改_ _init_ _.py 213
步驟33 使用牛頓法進行最佳化(自動計算) 215
33.1 求二階導數 215
33.2 使用牛頓法進行最佳化 217
步驟34 sin函式的高階導數 219
34.1 sin函式的實現 219
34.2 cos函式的實現 220
34.3 sin函式的高階導數 221
步驟35 高階導數的計算圖 225
35.1 tanh函式的導數 226
35.2 tanh函式的實現 226
35.3 高階導數的計算圖可視化 227
步驟36 DeZero的其他用途 234
36.1 double backprop的用途 234
36.2 深度學習研究中的套用示例 236
第4階段 創建神經網路 243
步驟37 處理張量 245
37.1 對各元素進行計算 245
37.2 使用張量時的反向傳播 247
37.3 使用張量時的反向傳播(補充內容)249
步驟38 改變形狀的函式 254
38.1 reshape函式的實現 254
38.2 從Variable對象調用reshape 258
38.3 矩陣的轉置 259
38.4 實際的transpose函式(補充內容)262
步驟39 求和的函式 264
39.1 sum函式的反向傳播 264
39.2 sum函式的實現 266
39.3 axis和keepdims 268
步驟40 進行廣播的函式 272
40.1 broadcast_to函式和sum_to函式 272
40.2 DeZero的broadcast_to函式和sum_to函式 275
40.3 支持廣播 277
步驟41 矩陣的乘積 280
41.1 向量的內積和矩陣的乘積 280
41.2 檢查矩陣的形狀 282
41.3 矩陣乘積的反向傳播 282
步驟42 線性回歸 288
42.1 玩具數據集 288
42.2 線性回歸的理論知識 289
42.3 線性回歸的實現 291
42.4 DeZero的mean_squared_error函式(補充內容) 295
步驟43 神經網路 298
43.1 DeZero中的linear函式 298
43.2 非線性數據集 301
43.3 激活函式和神經網路 302
43.4 神經網路的實現 303
步驟44 匯總參數的層 307
44.1 Parameter類的實現 307
44.2 Layer類的實現 309
44.3 Linear類的實現 312
44.4 使用Layer實現神經網路 314
步驟45 匯總層的層 316
45.1 擴展Layer類 316
45.2 Model類 319
45.3 使用Model來解決問題 321
45.4 MLP類 323
步驟46 通過Optimizer更新參數 325
46.1 Optimizer類 325
46.2 SGD類的實現 326
46.3 使用SGD類來解決問題 327
46.4 SGD以外的最佳化方法 328
步驟47 softmax函式和交叉熵誤差 331
47.1 用於切片操作的函式 331
47.2 softmax函式 334
47.3 交叉熵誤差 337
步驟48 多分類 340
48.1 螺旋數據集 340
48.2 用於訓練的代碼 341
步驟49 Dataset類和預處理 346
49.1 Dataset類的實現 346
49.2 大型數據集的情況 348
49.3 數據的連線 349
49.4 用於訓練的代碼 350
49.5 數據集的預處理 351
步驟50 用於取出小批量數據的DataLoader 354
50.1 什麼是疊代器 354
50.2 使用DataLoader 358
50.3 accuracy函式的實現 359
50.4 螺旋數據集的訓練代碼 360
步驟51 MINST的訓練 363
51.1 MNIST數據集 364
51.2 訓練MNIST 366
51.3 改進模型 368
第5階段 DeZero高級挑戰 377
步驟52 支持GPU 379
52.1 CuPy的安裝和使用方法 379
52.2 cuda模組 382
52.3 向Variable / Layer / DataLoader類添加代碼 383
52.4 函式的相應修改 386
52.5 在GPU上訓練MNIST 388
步驟53 模型的保存和載入 391
53.1 NumPy的save函式和load函式 391
53.2 Layer類參數的扁平化 394
53.3 Layer類的save函式和load函式 395
步驟54 Dropout和測試模式 398
54.1 什麼是Dropout 398
54.2 Inverted Dropout 401
54.3 增加測試模式 401
54.4 Dropout的實現 402
步驟55 CNN的機制(1) 404
55.1 CNN的網路結構 404
55.2 卷積運算 405
55.3 填充 407
55.4 步幅 408
55.5 輸出大小的計算方法 409
步驟56 CNN的機制(2)411
56.1 三階張量 411
56.2 結合方塊進行思考 412
56.3 小批量處理 414
56.4 池化層 415
步驟57 conv2d函式和pooling函式 418
57.1 使用im2col展開 418
57.2 conv2d函式的實現 420
57.3 Conv2d層的實現 425
57.4 pooling函式的實現 426
步驟58 具有代表性的CNN(VGG16)429
58.1 VGG16的實現 429
58.2 已訓練的權重數據 431
58.3 使用已訓練的VGG16 435
步驟59 使用RNN處理時間序列數據 438
59.1 RNN層的實現 438
59.2 RNN模型的實現 442
59.3 切斷連線的方法 445
59.4 正弦波的預測 446
步驟60 LSTM與數據載入器 451
60.1 用於時間序列數據的數據載入器 451
60.2 LSTM層的實現 453
附錄A inplace運算(步驟14的補充內容)463
A.1 問題確認 463
A.2 關於複製和覆蓋 464
A.3 DeZero的反向傳播 465
附錄B 實現get_item函式(步驟47的補充內容)466
附錄C 在Google Colaboratory上運行 469
後 記 473
參考文獻 477

相關詞條

熱門詞條

聯絡我們