內容簡介
《TensorFlow 2.X項目實戰》基於TensorFlow 2.1版本進行編寫。書中內容分為4篇。
第1篇包括TensorFlow的安裝、使用方法。這部分內容可以使讀者快速上手TensorFlow工具。
第2篇包括數據集製作、特徵工程等數據預處理工作,以及與數值分析相關的模型(其中包括wide_deep模型、梯度提升樹、知識圖譜、帶有JANET單元的RNN等模型)。
第3篇從自然語言處理、計算機視覺兩個套用方向介紹了基礎的算法原理和主流的模型。具體包括:TextCNN模型、帶有注意力機制的模型、帶有動態路由的RNN模型、BERTology系列模型、EfficientNet系列模型、Anchor-Free模型、YOLO V3模型等。
第4篇介紹了生成式模型和零次學習兩種技術,其中系統地介紹了信息熵、歸一化、f-GAN、最優傳輸、Sinkhorn算法,以及變分自編碼、DeblurGAN、AttGAN、DIM、VSC等模型。
本書結構清晰、案例豐富、通俗易懂、實用性強,適合對人工智慧、TensorFlow感興趣的讀者作為自學教程。另外,本書也適合社會培訓學校作為培訓教材,還適合計算機相關專業作為教學參考書。
圖書目錄
第1篇 準備
第1章 學習準備 2
1.1 什麼是TensorFlow框架 2
1.2 如何學習本書 3
第2章 快速上手TensorFlow 5
2.1 配置TensorFlow環境 5
2.1.1 準備硬體 5
2.1.2 準備開發環境 6
2.1.3 安裝TensorFlow 7
2.1.4 查看顯示卡的命令及方法 8
2.1.5 創建虛環境 11
2.2 訓練模型的兩種方式 13
2.2.1 “靜態圖”方式 13
2.2.2 “動態圖”方式 14
2.3 實例1:用靜態圖訓練模型,使其能夠從一組數據中找到y≈2x規律 15
2.3.1 開發步驟與代碼實現 15
2.3.2 模型是如何訓練的 22
2.3.3 生成檢查點檔案 22
2.3.4 載入檢查點檔案 23
2.3.5 修改疊代次數,二次訓練 23
2.4 實例2:用動態圖訓練一個具有保存檢查點功能的回歸模型 24
2.4.1 代碼實現:定義動態圖的網路結構 24
2.4.2 代碼實現:在動態圖中加入保存檢查點功能 25
2.4.3 代碼實現:在動態圖中訓練模型 26
2.4.4 運行程式,顯示結果 26
第3章 TensorFlow 2.X編程基礎 28
3.1 動態圖的編程方式 28
3.1.1 實例3:在動態圖中獲取參數 28
3.1.2 實例4:在靜態圖中使用動態圖 31
3.1.3 什麼是自動圖 32
3.2 掌握估算器框架接口的套用 33
3.2.1 了解估算器框架接口 33
3.2.2 實例5:使用估算器框架 34
3.2.3 定義估算器中模型函式的方法 40
3.2.4 用tf.estimator.RunConfig控制更多的訓練細節 42
3.2.5 用config檔案分配硬體運算資源 42
3.2.6 通過熱啟動實現模型微調 43
3.2.7 測試估算器模型 45
3.2.8 使用估算器模型 46
3.2.9 用鉤子函式(Training_Hooks)跟蹤訓練狀態 47
3.2.10 實例6:用鉤子函式獲取估算器模型的日誌 48
3.3 實例7:將估算器模型轉化成靜態圖模型 49
3.3.1 代碼實現:複製網路結構 49
3.3.2 代碼實現:重用輸入函式 51
3.3.3 代碼實現:創建會話恢復模型 52
3.3.4 代碼實現:繼續訓練 52
3.4 實例8:用估算器框架實現分散式部署訓練 54
3.4.1 運行程式:修改估算器模型,使其支持分散式 54
3.4.2 通過TF_CONFIG變數進行分散式配置 55
3.4.3 運行程式 56
3.4.4 擴展:用分布策略或KubeFlow框架進行分散式部署 58
3.5 掌握tf.keras接口的套用 58
3.5.1 了解Keras與tf.keras接口 58
3.5.2 實例9:用調用函式式API進行開發 59
3.5.3 實例10:用構建子類模式進行開發 63
3.5.4 使用tf.keras接口的開發模式總結 66
3.5.5 保存模型與載入模型 67
3.5.6 模型與JSON檔案的導入/導出 68
3.5.7 了解tf.keras接口中訓練模型的方法 69
3.5.8 Callbacks()方法的種類 71
3.6 分配運算資源與使用分布策略 72
3.6.1 為整個程式指定具體的GPU卡 72
3.6.2 為整個程式指定所占的GPU顯存 73
3.6.3 在程式內部,調配不同的OP(操作符)到指定的GPU卡 73
3.6.4 其他配置相關的選項 74
3.6.5 動態圖的設備指派 74
3.6.6 使用分布策略 74
3.7 用tfdbg調試TensorFlow模型 75
3.8 用自動混合精度加速模型訓練 75
3.8.1 自動混合精度的原理 75
3.8.2 自動混合精度的實現 76
3.8.3 自動混合精度的常見問題 76
第2篇 基礎
第4章 用TensorFlow製作自己的數據集 80
4.1 數據集的基本介紹 80
4.1.1 TensorFlow中的數據集格式 80
4.1.2 數據集與框架 81
4.1.3 什麼是TFDS 81
4.2 實例11:將模擬數據製作成記憶體對象數據集 82
4.2.1 代碼實現:生成模擬數據 82
4.2.2 代碼實現:定義占位符 83
4.2.3 代碼實現:建立會話,並獲取數據 84
4.2.4 代碼實現:將模擬數據可視化 84
4.2.5 運行程式 85
4.2.6 代碼實現:創建帶有疊代值並支持亂序功能的模擬數據集 85
4.3 實例12:將圖片製作成記憶體對象數據集 88
4.3.1 樣本介紹 88
4.3.2 代碼實現:載入檔案名稱稱與標籤 89
4.3.3 代碼實現:生成佇列中的批次樣本數據 91
4.3.4 代碼實現:在會話中使用數據集 92
4.3.5 運行程式 93
4.4 實例13:將Excel檔案製作成記憶體對象數據集 94
4.4.1 樣本介紹 94
4.4.2 代碼實現:逐行讀取數據並分離標籤 94
4.4.3 代碼實現:生成佇列中的批次樣本數據 95
4.4.4 代碼實現:在會話中使用數據集 96
4.4.5 運行程式 98
4.5 實例14:將圖片檔案製作成TFRecord數據集 98
4.5.1 樣本介紹 98
4.5.2 代碼實現:讀取樣本檔案的目錄及標籤 99
4.5.3 代碼實現:定義函式生成TFRecord數據集 100
4.5.4 代碼實現:讀取TFRecord數據集,並將其轉化為佇列 101
4.5.5 代碼實現:建立會話,將數據保存到檔案 102
4.5.6 運行程式 104
4.6 實例15:將記憶體對象製作成Dataset數據集 104
4.6.1 如何生成Dataset數據集 105
4.6.2 如何使用Dataset接口 106
4.6.3 tf.data.Dataset接口所支持的數據集變換操作 106
4.6.4 代碼實現:以元組和字典的方式生成Dataset對象 111
4.6.5 代碼實現:對Dataset對象中的樣本進行變換操作 112
4.6.6 代碼實現:創建Dataset疊代器 113
4.6.7 代碼實現:在會話中取出數據 114
4.6.8 運行程式 114
4.6.9 使用tf.data.Dataset.from_tensor_slices接口的注意事項 116
4.7 實例16:將圖片檔案製作成Dataset數據集 117
4.7.1 代碼實現:讀取樣本檔案的目錄及標籤 117
4.7.2 代碼實現:定義函式,實現圖片轉換操作 117
4.7.3 代碼實現:用自定義函式實現圖片歸一化 118
4.7.4 代碼實現:用第三方函式將圖片旋轉30° 119
4.7.5 代碼實現:定義函式,生成Dataset對象 120
4.7.6 代碼實現:建立會話,輸出數據 120
4.7.7 運行程式 122
4.7.8 擴展:使用Addons模組完善代碼 123
4.8 實例17:在動態圖中讀取Dataset數據集 123
4.8.1 代碼實現:添加動態圖調用 124
4.8.2 製作數據集 124
4.8.3 代碼實現:在動態圖中顯示數據 124
4.9 實例18:在不同場景中使用數據集 125
4.9.1 代碼實現:在訓練場景中使用數據集 125
4.9.2 代碼實現:在套用模型場景中使用數據集 127
4.9.3 代碼實現:在訓練與測試混合場景中使用數據集 128
4.10 tf.data.Dataset接口的更多套用 129
第5章 數值分析與特徵工程 130
5.1 什麼是特徵工程 130
5.1.1 特徵工程的作用 130
5.1.2 特徵工程的方法 131
5.1.3 離散數據特徵與連續數據特徵 131
5.1.4 連續數據與離散數據的相互轉換 132
5.2 什麼是特徵列接口 132
5.2.1 實例19:用feature_column模組處理連續值特徵列 132
5.2.2 實例20:將連續值特徵列轉換成離散值特徵列 136
5.2.3 實例21:將離散文本特徵列轉換為one-hot編碼與詞向量 139
5.2.4 實例22:根據特徵列生成交叉列 147
5.2.5 了解序列特徵列接口 148
5.2.6 實例23:使用序列特徵列接口對文本數據預處理 149
5.3 實例24:用wide_deep模型預測人口收入 153
5.3.1 認識wide_deep模型 154
5.3.2 模型任務與數據集介紹 154
5.3.3 代碼實現:探索性數據分析 157
5.3.4 代碼實現:將樣本轉換為特徵列 159
5.3.5 代碼實現:生成估算器模型 162
5.3.6 代碼實現:定義輸入函式 163
5.3.7 代碼實現:定義用於導出凍結圖檔案的函式 164
5.3.8 代碼實現:定義類,解析啟動參數 165
5.3.9 代碼實現:訓練和測試模型 166
5.3.10 代碼實現:使用模型 168
5.3.11 代碼實現:調用模型進行預測 169
5.4 實例25:梯度提升樹(TFBT)接口的套用 170
5.4.1 梯度提升樹接口介紹 170
5.4.2 代碼實現:為梯度提升樹模型準備特徵列 170
5.4.3 代碼實現:構建梯度提升樹模型 171
5.4.4 訓練並使用模型 172
5.5 實例26:基於知識圖譜的電影推薦系統 173
5.5.1 模型任務與數據集介紹 173
5.5.2 預處理數據 174
5.5.3 代碼實現:搭建MKR模型 174
5.5.4 訓練模型並輸出結果 182
5.6 實例27:預測飛機發動機的剩餘使用壽命 182
5.6.1 模型任務與數據集介紹 183
5.6.2 循環神經網路介紹 184
5.6.3 了解RNN模型的基礎單元LSTM 184
5.6.4 認識JANET單元 188
5.6.5 代碼實現:預處理數據——製作數據集的輸入樣本與標籤 188
5.6.6 代碼實現:構建帶有JANET單元的多層動態RNN模型 193
5.6.7 代碼實現:訓練並測試模型 194
5.6.8 運行程式 196
第3篇 進階
第6章 自然語言處理 200
6.1 BERT模型與NLP的發展階段 200
6.1.1 基礎的神經網路階段 200
6.1.2 BERTology階段 200
6.2 實例28:用TextCNN模型分析評論者是否滿意 201
6.2.1 什麼是卷積神經網路 201
6.2.2 模型任務與數據集介紹 202
6.2.3 熟悉模型:了解TextCNN模型 202
6.2.4 數據預處理:用preprocessing接口製作字典 203
6.2.5 代碼實現:生成NLP文本數據集 206
6.2.6 代碼實現:定義TextCNN模型 208
6.2.7 運行程式 210
6.3 實例29:用帶有注意力機制的模型分析評論者是否滿意 210
6.3.1 BERTology系列模型的基礎結構——注意力機制 210
6.3.2 了解帶有位置向量的詞嵌入模型 212
6.3.3 了解模型任務與數據集 213
6.3.4 代碼實現:將tf.keras接口中的IMDB數據集還原成句子 214
6.3.5 代碼實現:用tf.keras接口開發帶有位置向量的詞嵌入層 216
6.3.6 代碼實現:用tf.keras接口開發注意力層 218
6.3.7 代碼實現:用tf.keras接口訓練模型 221
6.3.8 運行程式 222
6.3.9 擴展:用Targeted Dropout技術進一步提升模型的性能 223
6.4 實例30:用帶有動態路由的RNN模型實現文本分類任務 224
6.4.1 了解膠囊神經網路與動態路由 224
6.4.2 模型任務與數據集介紹 230
6.4.3 代碼實現:預處理數據——對齊序列數據並計算長度 230
6.4.4 代碼實現:定義數據集 231
6.4.5 代碼實現:用動態路由算法聚合信息 231
6.4.6 代碼實現:用IndyLSTM單元搭建RNN模型 234
6.4.7 代碼實現:建立會話,訓練網路 235
6.4.8 擴展:用分級網路將文章(長文本數據)分類 236
6.5 NLP中的常見任務及數據集 236
6.5.1 基於文章處理的任務 237
6.5.2 基於句子處理的任務 237
6.5.3 基於句子中詞的處理任務 238
6.6 了解Transformers庫 239
6.6.1 什麼是Transformers庫 240
6.6.2 Transformers庫的安裝方法 241
6.6.3 查看Transformers庫的安裝版本 241
6.6.4 Transformers庫的3層套用結構 242
6.7 實例31:用管道方式完成多種NLP任務 243
6.7.1 在管道方式中指定NLP任務 243
6.7.2 代碼實現:完成文本分類任務 244
6.7.3 代碼實現:完成特徵提取任務 246
6.7.4 代碼實現:完成完形填空任務 247
6.7.5 代碼實現:完成閱讀理解任務 248
6.7.6 代碼實現:完成摘要生成任務 250
6.7.7 預訓練模型檔案的組成及其載入時的固定名稱 251
6.7.8 代碼實現:完成實體詞識別任務 251
6.7.9 管道方式的工作原理 252
6.7.10 在管道方式中套用指定模型 255
6.8 Transformers庫中的自動模型類(TFAutoModel) 255
6.8.1 了解各種TFAutoModel類 255
6.8.2 TFAutoModel類的模型載入機制 256
6.8.3 Transformers庫中其他的語言模型(model_cards) 257
6.9 Transformers庫中的BERTology系列模型 259
6.9.1 Transformers庫的檔案結構 259
6.9.2 查找Transformers庫中可以使用的模型 263
6.9.3 更適合NLP任務的激活函式(GELU) 264
6.9.4 實例32:用BERT模型實現完形填空任務 266
6.10 Transformers庫中的詞表工具 269
6.10.1 了解PreTrainedTokenizer類中的特殊詞 270
6.10.2 PreTrainedTokenizer類中的特殊詞使用方法舉例 271
6.10.3 向PreTrainedTokenizer類中添加詞 275
6.10.4 實例33:用手動載入GPT2模型權重的方式將句子補充完整 276
6.10.5 子詞的拆分原理 280
6.11 BERTology系列模型 281
6.11.1 Transformer模型之前的主流模型 281
6.11.2 Transformer模型 283
6.11.3 BERT模型 285
6.11.4 BERT模型的缺點 288
6.11.5 GPT-2模型 289
6.11.6 Transformer-XL模型 289
6.11.7 XLNet模型 290
6.11.8 XLNet模型與AE和AR間的關係 294
6.11.9 RoBERTa模型 294
6.11.10 ELECTRA模型 295
6.11.11 T5模型 296
6.11.12 ALBERT模型 296
6.11.13 DistillBERT模型與知識蒸餾 299
6.12 用遷移學習訓練BERT模型來對中文分類 300
6.12.1 樣本介紹 300
6.12.2 代碼實現:構建並載入BERT預訓練模型 301
6.12.3 代碼實現:構建數據集 302
6.12.4 BERT模型類的內部邏輯 303
6.12.5 代碼實現:定義最佳化器並訓練模型 305
6.12.6 擴展:更多的中文預訓練模型 306
第7章 機器視覺處理 307
7.1 實例34:使用預訓練模型識別圖像 307
7.1.1 了解ResNet50模型與殘差網路 307
7.1.2 獲取預訓練模型 308
7.1.3 使用預訓練模型 310
7.1.4 預訓練模型的更多調用方式 311
7.2 了解EfficientNet系列模型 311
7.2.1 EfficientNet系列模型的主要結構 312
7.2.2 MBConv卷積塊 313
7.2.3 什麼是深度可分離卷積 314
7.2.4 什麼是DropConnect層 317
7.2.5 模型的規模和訓練方式 317
7.2.6 隨機數據增強(RandAugment) 319
7.2.7 用對抗樣本訓練的模型——AdvProp 319
7.2.8 用自訓練框架訓練的模型——Noisy Studet 321
7.2.9 主流卷積模型的通用結構——單調設計 322
7.2.10 什麼是目標檢測中的上採樣與下採樣 323
7.2.11 用八度卷積替換模型中的普通卷積 323
7.2.12 實例35:用EfficientNet模型識別圖像 324
7.3 實例36:在估算器框架中用tf.keras接口訓練ResNet模型,識別
圖片中是橘子還是蘋果 325
7.3.1 樣本準備 325
7.3.2 代碼實現:準備訓練與測試數據集 326
7.3.3 代碼實現:製作模型輸入函式 326
7.3.4 代碼實現:搭建ResNet模型 327
7.3.5 代碼實現:訓練分類器模型 328
7.3.6 運行程式:評估模型 329
7.3.7 擴展:全連線網路的最佳化 330
7.3.8 在微調過程中如何選取預訓練模型 330
7.4 基於圖片內容的處理任務 331
7.4.1 了解目標識別任務 331
7.4.2 了解圖片分割任務 331
7.4.3 什麼是非極大值抑制(NMS)算法 332
7.4.4 了解Mask R-CNN模型 333
7.4.5 了解Anchor-Free模型 335
7.4.6 了解FCOS模型 336
7.4.7 了解focal損失 337
7.4.8 了解CornerNet與CornerNet-Lite模型 338
7.4.9 了解沙漏(Hourglass)網路模型 338
7.4.10 了解CenterNet模型 340
7.5 實例37:用YOLO V3模型識別門牌號 341
7.5.1 模型任務與樣本介紹 341
7.5.2 代碼實現:讀取樣本數據並製作標籤 342
7.5.3 YOLO V3模型的樣本與結構 347
7.5.4 代碼實現:用tf.keras接口構建YOLO V3模型並計算損失 349
7.5.5 代碼實現:訓練模型 354
7.5.6 代碼實現:用模型識別門牌號 358
7.5.7 擴展:標註自己的樣本 360
第4篇 高級
第8章 生成式模型——能夠輸出內容的模型 364
8.1 快速了解信息熵(information entropy) 364
8.1.1 信息熵與機率的計算關係 365
8.1.2 聯合熵(joint entropy)及其公式介紹 367
8.1.3 條件熵(conditional entropy)及其公式介紹 367
8.1.4 交叉熵(cross entropy)及其公式介紹 368
8.1.5 相對熵(relative entropy)及其公式介紹 369
8.1.6 JS散度及其公式介紹 370
8.1.7 互信息(mutual information)及其公式介紹 370
8.2 通用的無監督模型——自編碼與對抗神經網路 372
8.2.1 了解自編碼網路模型 372
8.2.2 了解對抗神經網路模型 373
8.2.3 自編碼網路模型與對抗神經網路模型的關係 373
8.3 實例38:用多種方法實現變分自編碼神經網路 373
8.3.1 什麼是變分自編碼神經網路 374
8.3.2 了解變分自編碼模型的結構 374
8.3.3 代碼實現:用tf.keras接口實現變分自編碼模型 375
8.3.4 代碼實現:訓練無標籤模型的編寫方式 380
8.3.5 代碼實現:將張量損失封裝成損失函式 382
8.3.6 代碼實現:在動態圖框架中實現變分自編碼 383
8.3.7 代碼實現:以類的方式封裝模型損失函式 384
8.3.8 代碼實現:更合理的類封裝方式 385
8.4 常用的批量歸一化方法 386
8.4.1 自適應的批量歸一化(BatchNorm)算法 387
8.4.2 實例歸一化(InstanceNorm)算法 387
8.4.3 批次再歸一化(ReNorm)算法 387
8.4.4 層歸一化(LayerNorm)算法 388
8.4.5 組歸一化(GroupNorm)算法 388
8.4.6 可交換歸一化(SwitchableNorm)算法 388
8.5 實例39:構建DeblurGAN模型,將模糊照片變清晰 388
8.5.1 圖像風格轉換任務與DualGAN模型 388
8.5.2 模型任務與樣本介紹 389
8.5.3 準備SwitchableNorm算法模組 390
8.5.4 代碼實現:構建DeblurGAN中的生成器模型 390
8.5.5 代碼實現:構建DeblurGAN中的判別器模型 392
8.5.6 代碼實現:搭建DeblurGAN的完整結構 394
8.5.7 代碼實現:引入庫檔案,定義模型參數 394
8.5.8 代碼實現:定義數據集,構建正反向模型 395
8.5.9 代碼實現:計算特徵空間損失,並將其編譯到生成器模型的訓練模型中 397
8.5.10 代碼實現:按指定次數訓練模型 399
8.5.11 代碼實現:用模型將模糊圖片變清晰 401
8.5.12 練習題 403
8.5.13 擴展:DeblurGAN模型的更多妙用 404
8.6 全面了解WGAN模型 404
8.6.1 GAN模型難以訓練的原因 404
8.6.2 WGAN模型——解決GAN模型難以訓練的問題 405
8.6.3 WGAN模型的原理與不足之處 406
8.6.4 WGAN-gp模型——更容易訓練的GAN模型 407
8.6.5 WGAN-div模型——帶有W散度的GAN模型 409
8.7 實例40:構建AttGAN模型,對照片進行加鬍子、加頭簾、
加眼鏡、變年輕等修改 411
8.7.1 什麼是人臉屬性編輯任務 411
8.7.2 模型任務與樣本介紹 412
8.7.3 了解AttGAN模型的結構 414
8.7.4 代碼實現:實現支持動態圖和靜態圖的數據集工具類 415
8.7.5 代碼實現:將CelebA做成數據集 417
8.7.6 代碼實現:構建AttGAN模型的編碼器 421
8.7.7 代碼實現:構建含有轉置卷積的解碼器模型 422
8.7.8 代碼實現:構建AttGAN模型的判別器模型部分 424
8.7.9 代碼實現:定義模型參數,並構建AttGAN模型 426
8.7.10 代碼實現:定義訓練參數,搭建正反向模型 429
8.7.11 代碼實現:訓練模型 434
8.7.12 為人臉添加不同的眼鏡 438
8.7.13 擴展:AttGAN模型的局限性 439
8.8 散度在神經網路中的套用 440
8.8.1 了解f-GAN框架 440
8.8.2 基於f散度的變分散度最小化方法 440
8.8.3 用Fenchel共軛函式實現f-GAN 441
8.8.4 f-GAN中判別器的激活函式 443
8.8.5 了解互信息神經估計模型 445
8.8.6 實例41:用神經網路估計互信息 447
8.8.7 穩定訓練GAN模型的技巧 451
8.9 實例42:用最大化互信息(DIM)模型做一個圖片搜尋器 453
8.9.1 了解DIM模型的設計思想 453
8.9.2 了解DIM模型的結構 454
8.9.3 代碼實現:載入MNIST數據集 457
8.9.4 代碼實現:定義DIM模型 458
8.9.5 實例化DIM模型並進行訓練 461
8.9.6 代碼實現:提取子模型,並用其可視化圖片特徵 461
8.9.7 代碼實現:用訓練好的模型來搜尋圖片 462
第9章 識別未知分類的方法——零次學習 464
9.1 了解零次學習 464
9.1.1 零次學習的原理 464
9.1.2 與零次學習有關的常用數據集 467
9.1.3 零次學習的基本做法 468
9.1.4 直推式學習 468
9.1.5 泛化的零次學習任務 469
9.2 零次學習中的常見難點 469
9.2.1 領域漂移問題 469
9.2.2 原型稀疏性問題 470
9.2.3 語義間隔問題 470
9.3 帶有視覺結構約束的直推ZSL(VSC模型) 472
9.3.1 分類模型中視覺特徵的本質 472
9.3.2 VSC模型的原理 472
9.3.3 基於視覺中心點學習的約束方法 474
9.3.4 基於倒角距離的視覺結構約束 475
9.3.5 什麼是對稱倒角距離 475
9.3.6 基於二分匹配的視覺結構約束 475
9.3.7 什麼是指派問題與耦合矩陣 476
9.3.8 基於W距離的視覺結構約束 477
9.3.9 什麼是最優傳輸 478
9.3.10 什麼是OT中的熵正則化 479
9.4 詳解Sinkhorn疊代算法 481
9.4.1 Sinkhorn算法的求解轉換 481
9.4.2 Sinkhorn算法的原理 482
9.4.3 Sinkhorn算法中的原理 483
9.4.4 舉例Sinkhorn算法過程 484
9.4.5 Sinkhorn算法中的質量守恆 486
9.4.6 Sinkhorn算法的代碼實現 489
9.5 實例43:用VSC模型識別圖片中的鳥屬於什麼類別 490
9.5.1 模型任務與樣本介紹 490
9.5.2 用遷移學習的方式獲得訓練集分類模型 492
9.5.3 用分類模型提取圖片的視覺特徵 492
9.5.4 代碼實現:訓練VSC模型,將類屬性特徵轉換成類視覺特徵 493
9.5.5 代碼實現:基於W距離的損失函式 494
9.5.6 載入數據並進行訓練 495
9.5.7 代碼實現:根據特徵距離對圖片進行分類 496
9.6 提升零次學習精度的方法 497
9.6.1 分析視覺特徵的質量 497
9.6.2 分析直推式學習的效果 499
9.6.3 分析直推模型的能力 499
9.6.4 分析未知類別的聚類效果 500
9.6.5 清洗測試數據集 502
9.6.6 利用可視化方法進行輔助分析 503
後記——讓技術更好地商業化落地 505
作者簡介
李金洪
“大蛇智慧型”網站創始人、“代碼醫生”工作室主程式設計師。
精通Python、C、C++、彙編、Java和Go等多種程式語言。擅長神經網路、算法、協定分析、逆向工程和移動網際網路安全架構等技術。