本書是介紹如何在產(chǎn)品中使用TensorFlow的實用教程。本書介紹了可以使用TensorFlow的多種情況, 并通過真實世界的項目, 向讀者展示了如何使用TensorFlow。本書還講解了在實際環(huán)境中使用TensorFlow的創(chuàng)新方法。
本書主要介紹第二代機器學習與數(shù)值計算,提供了訓練模型、機器學習、深度學習以及使用各種神經(jīng)網(wǎng)絡的項目,以此來講解TensorFlow的應用領域,還討論如何使用TensorFlow計算復雜數(shù)值。
本書在教讀者使用TensorFlow的同時,還展示了如何使用張量來探究各層的數(shù)據(jù)。只需選定一個跟讀者環(huán)境相匹配的項目,就能學到如何在產(chǎn)品中應用TensorFlow的相關知識。讀完本書后,讀者將能通過TensorFlow有效改善項目的速度和效率。
本書包括以下內容:
● 加載、交互、剖析、處理和存儲復雜數(shù)據(jù)集;
● 使用先進的技術來解決分類和回歸問題;
● 使用線性回歸模型預測簡單時間序列的輸出;
● 使用邏輯回歸方法預測時間序列在未來的結果;
● 使用深度學習方法對圖像進行分類;
● 標定圖像集,并使用包括卷積神經(jīng)網(wǎng)絡層的深度神經(jīng)網(wǎng)絡生成繪畫圖像;
● 使用循環(huán)神經(jīng)網(wǎng)絡對時間信號進行預測并生成音樂。
Rodolfo Bonnin是一名系統(tǒng)工程師,同時也是阿根廷國立理工大學的博士生。他還在德國斯圖加特大學進修過并行編程和圖像理解的研究生課程。
他從2005年開始研究高性能計算,并在2008年開始研究和實現(xiàn)卷積神經(jīng)網(wǎng)絡,編寫過一個同時支持CPU和GPU的神經(jīng)網(wǎng)絡前饋部分。最近,他一直在進行使用神經(jīng)網(wǎng)絡進行欺詐模式檢測的工作,目前正在使用ML技術進行信號分類。
第1章 探索和轉換數(shù)據(jù) 1
1.1 TensorFlow的主要數(shù)據(jù)結構—張量 1
1.1.1 張量的屬性—階、形狀和類型 1
1.1.2 創(chuàng)建新的張量 3
1.1.3 動手工作—與TensorFlow交互 4
1.2 處理計算工作流—TensorFlow的數(shù)據(jù)流圖 5
1.2.1 建立計算圖 5
1.2.2 數(shù)據(jù)供給 6
1.2.3 變量 6
1.2.4 保存數(shù)據(jù)流圖 6
1.3 運行我們的程序—會話 8
1.4 基本張量方法 8
1.4.1 簡單矩陣運算 8
1.4.2 序列 11
1.4.3 張量形狀變換 12
1.4.4 數(shù)據(jù)流結構和結果可視化—TensorBoard 14
1.5 從磁盤讀取信息 18
1.5.1 列表格式—CSV 18
1.5.2 讀取圖像數(shù)據(jù) 19
1.5.3 加載和處理圖像 20
1.5.4 讀取標準TensorFlow格式 21
1.6 小結 21
第2章 聚類 22
2.1 從數(shù)據(jù)中學習—無監(jiān)督學習 22
2.2 聚類的概念 22
2.3 k均值 23
2.3.1 k均值的機制 23
2.3.2 算法迭代判據(jù) 23
2.3.3 k均值算法拆解 24
2.3.4 k均值的優(yōu)缺點 25
2.4 k最近鄰 25
2.4.1 k最近鄰算法的機制 26
2.4.2 k-nn的優(yōu)點和缺點 26
2.5 有用的庫和使用示例 27
2.5.1 matplotlib繪圖庫 27
2.5.2 scikit-learn數(shù)據(jù)集模塊 28
2.5.3 人工數(shù)據(jù)集類型 28
2.6 例1—對人工數(shù)據(jù)集的k均值
聚類 29
2.6.1 數(shù)據(jù)集描述和加載 29
2.6.2 模型架構 30
2.6.3 損失函數(shù)描述和優(yōu)化循環(huán) 31
2.6.4 停止條件 31
2.6.5 結果描述 31
2.6.6 每次迭代中的質心變化 32
2.6.7 完整源代碼 32
2.6.8 k均值用于環(huán)狀數(shù)據(jù)集 34
2.7 例2—對人工數(shù)據(jù)集使用最近鄰算法 36
2.7.1 數(shù)據(jù)集生成 36
2.7.2 模型結構 36
2.7.3 損失函數(shù)描述 37
2.7.4 停止條件 37
2.7.5 結果描述 37
2.7.6 完整源代碼 37
2.8 小結 39
第3章 線性回歸 40
3.1 單變量線性模型方程 40
3.2 選擇損失函數(shù) 41
3.3 最小化損失函數(shù) 42
3.3.1 最小方差的全局最小值 42
3.3.2 迭代方法:梯度下降 42
3.4 示例部分 43
3.4.1 TensorFlow中的優(yōu)化方法—訓練模塊 43
3.4.2 tf.train.Optimizer類 43
3.4.3 其他Optimizer實例類型 44
3.5 例1—單變量線性回歸 44
3.5.1 數(shù)據(jù)集描述 45
3.5.2 模型結構 45
3.5.3 損失函數(shù)描述和Optimizer 46
3.5.4 停止條件 48
3.5.5 結果描述 48
3.5.6 完整源代碼 49
3.6 例2—多變量線性回歸 51
3.6.1 有用的庫和方法 51
3.6.2 Pandas庫 51
3.6.3 數(shù)據(jù)集描述 51
3.6.4 模型結構 53
3.6.5 損失函數(shù)和Optimizer 54
3.6.6 停止條件 55
3.6.7 結果描述 55
3.6.8 完整源代碼 56
3.7 小結 57
第4章 邏輯回歸 58
4.1 問題描述 58
4.2 Logistic函數(shù)的逆函數(shù)—Logit函數(shù) 59
4.2.1 伯努利分布 59
4.2.2 聯(lián)系函數(shù) 60
4.2.3 Logit函數(shù) 60
4.2.4 對數(shù)幾率函數(shù)的逆函數(shù)—Logistic函數(shù) 60
4.2.5 多類分類應用—Softmax回歸 62
4.3 例1—單變量邏輯回歸 64
4.3.1 有用的庫和方法 64
4.3.2 數(shù)據(jù)集描述和加載 65
4.3.3 模型結構 67
4.3.4 損失函數(shù)描述和優(yōu)化器循環(huán) 67
4.3.5 停止條件 68
4.3.6 結果描述 68
4.3.7 完整源代碼 69
4.3.8 圖像化表示 71
4.4 例2—基于skflow單變量邏輯回歸 72
4.4.1 有用的庫和方法 72
4.4.2 數(shù)據(jù)集描述 72
4.4.3 模型結構 72
4.4.4 結果描述 73
4.4.5 完整源代碼 74
4.5 小結 74
第5章 簡單的前向神經(jīng)網(wǎng)絡 75
5.1 基本概念 75
5.1.1 人工神經(jīng)元 75
5.1.2 神經(jīng)網(wǎng)絡層 76
5.1.3 有用的庫和方法 78
5.2 例1—非線性模擬數(shù)據(jù)回歸 79
5.2.1 數(shù)據(jù)集描述和加載 79
5.2.2 數(shù)據(jù)集預處理 80
5.2.3 模型結構—損失函數(shù)描述 80
5.2.4 損失函數(shù)優(yōu)化器 80
5.2.5 準確度和收斂測試 80
5.2.6 完整源代碼 80
5.2.7 結果描述 81
5.3 例2—通過非線性回歸,對汽車燃料效率建模 82
5.3.1 數(shù)據(jù)集描述和加載 82
5.3.2 數(shù)據(jù)預處理 83
5.3.3 模型架構 83
5.3.4 準確度測試 84
5.3.5 結果描述 84
5.3.6 完整源代碼 84
5.4 例3—多類分類:葡萄酒分類 86
5.4.1 數(shù)據(jù)集描述和加載 86
5.4.2 數(shù)據(jù)集預處理 86
5.4.3 模型架構 87
5.4.4 損失函數(shù)描述 87
5.4.5 損失函數(shù)優(yōu)化器 87
5.4.6 收斂性測試 88
5.4.7 結果描述 88
5.4.8 完整源代碼 88
5.5 小結 89
第6章 卷積神經(jīng)網(wǎng)絡 90
6.1 卷積神經(jīng)網(wǎng)絡的起源 90
6.1.1 卷積初探 90
6.1.2 降采樣操作—池化 95
6.1.3 提高效率—dropout操作 98
6.1.4 卷積類型層構建辦法 99
6.2 例1—MNIST數(shù)字分類 100
6.2.1 數(shù)據(jù)集描述和加載 100
6.2.2 數(shù)據(jù)預處理 102
6.2.3 模型結構 102
6.2.4 損失函數(shù)描述 103
6.2.5 損失函數(shù)優(yōu)化器 103
6.2.6 準確性測試 103
6.2.7 結果描述 103
6.2.8 完整源代碼 104
6.3 例2—CIFAR10數(shù)據(jù)集的圖像分類 106
6.3.1 數(shù)據(jù)集描述和加載 107
6.3.2 數(shù)據(jù)集預處理 107
6.3.3 模型結構 108
6.3.4 損失函數(shù)描述和優(yōu)化器 108
6.3.5 訓練和準確性測試 108
6.3.6 結果描述 108
6.3.7 完整源代碼 109
6.4 小結 110
第7章 循環(huán)神經(jīng)網(wǎng)絡和LSTM 111
7.1 循環(huán)神經(jīng)網(wǎng)絡 111
7.1.1 梯度爆炸和梯度消失 112
7.1.2 LSTM神經(jīng)網(wǎng)絡 112
7.1.3 其他RNN結構 116
7.1.4 TensorFlow LSTM有用的類和方法 116
7.2 例1—能量消耗、單變量時間序列數(shù)據(jù)預測 117
7.2.1 數(shù)據(jù)集描述和加載 117
7.2.2 數(shù)據(jù)預處理 118
7.2.3 模型結構 119
7.2.4 損失函數(shù)描述 121
7.2.5 收斂檢測 121
7.2.6 結果描述 122
7.2.7 完整源代碼 122
7.3 例2—創(chuàng)作巴赫風格的曲目 125
7.3.1 字符級模型 125
7.3.2 字符串序列和概率表示 126
7.3.3 使用字符對音樂編碼—ABC音樂格式 126
7.3.4 有用的庫和方法 128
7.3.5 數(shù)據(jù)集描述和加載 129
7.3.6 網(wǎng)絡訓練 129
7.3.7 數(shù)據(jù)集預處理 130
7.3.8 損失函數(shù)描述 131
7.3.9 停止條件 131
7.3.10 結果描述 131
7.3.11 完整源代碼 132
7.4 小結 137
第8章 深度神經(jīng)網(wǎng)絡 138
8.1 深度神經(jīng)網(wǎng)絡的定義 138
8.2 深度網(wǎng)絡結構的歷史變遷 138
8.2.1 LeNet 5 138
8.2.2 Alexnet 139
8.2.3 VGG模型 139
8.2.4 第一代Inception模型 140
8.2.5 第二代Inception模型 141
8.2.6 第三代Inception模型 141
8.2.7 殘差網(wǎng)絡(ResNet) 142
8.2.8 其他的深度神經(jīng)網(wǎng)絡
結構 143
8.3 例子—VGG藝術風格轉移 143
8.3.1 有用的庫和方法 143
8.3.2 數(shù)據(jù)集描述和加載 143
8.3.3 數(shù)據(jù)集預處理 144
8.3.4 模型結構 144
8.3.5 損失函數(shù) 144
8.3.6 收斂性測試 145
8.3.7 程序執(zhí)行 145
8.3.8 完整源代碼 146
8.4 小結 153
第9章 規(guī)模化運行模型—GPU和
服務 154
9.1 TensorFlow中的GPU支持 154
9.2 打印可用資源和設備參數(shù) 155
9.2.1 計算能力查詢 155
9.2.2 選擇CPU用于計算 156
9.2.3 設備名稱 156
9.3 例1—將一個操作指派給
GPU 156
9.4 例2—并行計算Pi的數(shù)值 157
9.4.1 實現(xiàn)方法 158
9.4.2 源代碼 158
9.5 分布式TensorFlow 159
9.5.1 分布式計算組件 159
9.5.2 創(chuàng)建TensorFlow集群 160
9.5.3 集群操作—發(fā)送計算方法
到任務 161
9.5.4 分布式編碼結構示例 162
9.6 例3—分布式Pi計算 163
9.6.1 服務器端腳本 163
9.6.2 客戶端腳本 164
9.7 例4—在集群上運行分布式
模型 165
9.8 小結 168
第10章 庫的安裝和其他技巧 169
10.1 Linux安裝 169
10.1.1 安裝要求 170
10.1.2 Ubuntu安裝準備(安裝操作的
前期操作) 170
10.1.3 Linux下通過pip安裝
TensorFlow 170
10.1.4 Linux下從源碼安裝
TensorFlow 175
10.2 Windows安裝 179
10.2.1 經(jīng)典的Docker工具箱
方法 180
10.2.2 安裝步驟 180
10.3 MacOS X安裝 183
10.4 小結 185