## 1.?TensorFlow 基礎知識
在本章中,我將簡要介紹 TensorFlow 的代碼及其編程模型。在本章的最后,讀者可以在他們的個人計算機上安裝 TensorFlow 軟件包。
### 開源軟件包
學術界已經對機器學習進行了數十年的調查,但直到近幾年,它的滲透率在企業中也有所增加。這要歸功于它已經擁有的大量數據以及現在可用的前所未有的計算能力。
在這種情況下,毫無疑問,在 Alphabet 的支持下,谷歌是機器學習技術在其所有虛擬計劃和產品中發揮關鍵作用的最大公司之一。
去年10月,當 Alphabet 宣布那個季度谷歌的業績,銷售額和利潤大幅增加時,首席執行官桑達皮采清楚地說:“機器學習是一種核心的,變革性的方式,我們正在重新思考我們正在做的一切”。
從技術上講,我們正面臨著谷歌不是唯一一個重要角色的時代變遷。其他技術公司,如微軟,Facebook,亞馬遜和蘋果等眾多公司也在增加對這些領域的投資。
在此背景下,幾個月前谷歌在開源許可證(Apache 2.0)下發布了 TensorFlow 引擎。想要將機器學習納入其項目和產品的開發人員和研究人員可以使用 TensorFlow,就像 Google 在內部使用 Gmail,Google 照片,搜索,語音識別等不同的商業產品一樣。
TensorFlow 最初是由 Google Brain Team 開發的,目的是進行機器學習和深度神經網絡研究,但該系統足以應用于各種其他機器學習問題。
由于我是一名工程師,而且我正在與工程師交談,因此本書將深入了解數據流圖如何表示算法。TensorFlow 可以看作是使用數據流圖進行數值計算的庫。圖中的節點表示數學運算,而圖的邊表示多維數據數組(張量),它們將節點互連。
TensorFlow 圍繞構建和操作計算圖的基本思想構建,象征性地表示要執行的數值運算。這使得 TensorFlow 現在可以從 Linux 64 位平臺(如 Mac OS X)以及 Android 或 iOS 等移動平臺中利用 CPU 和 GPU。
這個新軟件包的另一個優點是它的可視 TensorBoard 模塊,它提供了大量有關如何監視和顯示算法運行的信息。在創建更好的模型的過程中,能夠測量和顯示算法的行為是非常重要的。我感覺目前許多模型都是通過一個小型的盲目過程,通過試錯來調優,明顯浪費資源,以及最重要時間。
### TensorFlow 服務
最近 Google 推出了 TensorFlow 服務 [3],這有助于開發人員將他們的 TensorFlow 機器學習模型(即使如此,也可以擴展來服務其他類型的模型)投入生產。TensorFlow 服務是一個開源服務系統(用 C++ 編寫),現在可以在 Apache 2.0 許可下[在 GitHub ](http://tensorflow.github.io/serving/)上獲得。
TensorFlow 和 TensorFlow 服務有什么區別??在 TensorFlow 中,開發人員更容易構建機器學習算法,并針對某些類型的數據輸入進行訓練,TensorFlow 服務專門使這些模型可用于生產環境。我們的想法是開發人員使用 TensorFlow 訓練他們的模型,然后他們使用 TensorFlow 服務的 API 來響應來自客戶端的輸入。
這允許開發人員根據實際數據大規模試驗不同的模型,并隨時間變化,保持穩定的架構和 API。
典型的流水線是將訓練數據提供給學習器,學習器輸出模型,模型在被驗證之后準備好部署到 TensorFlow 服務系統。?隨著時間的推移和新數據的出現,改進模型,啟動和迭代我們的模型是很常見的。事實上,在 Google 的博文中 [4] 中,他們提到在谷歌,許多流水線都在持續運行,隨著新數據的出現,產生了新的模型版本。

開發人員用來與 TensorFlow 服務進行通信的前端實現,基于 [gRPC](http://www.grpc.io/) ,這是一種來自 Google 的高性能開源RPC框架。
如果你有興趣了解 TensorFlow 服務的更多信息,我建議你先閱讀服務架構概述 [5] 部分,設置你的環境并開始閱讀基礎教程 [6]。
### TensorFlow 的安裝
是時候做一些事情了。從現在開始,我建議你交替閱讀和在計算機上練習。
TensorFlow 有 Python API(以及 C/C++),需要安裝 Python 2.7(我假設任何閱讀本書的工程師都知道如何操作)。
通常,在使用 Python 時,應使用虛擬環境`virtualenv`。?`virtualenv`是一種工具,用于在同一臺計算機的不同部分中保持不同項目所需的 Python 依賴關系。如果我們使用`virtualenv`來安裝 TensorFlow,這將不會覆蓋需要 TensorFlow 的其他項目的現有 Python 包版本。
首先,如果尚未安裝`pip`和`virtualenv`,則應安裝,如下面的腳本所示:
```
# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev python-virtualenv
# Mac OS X
$ sudo easy_install pip
$ sudo pip install --upgrade virtualenv
```
`~/tensorflow`目錄中的環境`virtualenv`:
`$ virtualenv --system-site-packages ~/tensorflow`
下一步是激活`virtualenv`。這可以按如下方式完成:
```
$ source ~/tensorflow/bin/activate # with bash
$ source ~/tensorflow/bin/activate.csh # with csh
(tensorflow)$
```
我們工作的虛擬環境的名稱,將從現在開始顯示在每個命令行的開頭。激活`virtualenv`后,你可以使用`pip`在其中安裝 TensorFlow:
```
# Ubuntu/Linux 64-bit, CPU only:
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
# Mac OS X, CPU only:
(tensorflow)$ sudo easy_install --upgrade six
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl
```
我建議你訪問此處提供的官方文檔,來確保你安裝的是最新版本。
如果運行代碼的平臺具有 GPU,要使用的包不同。我建議你訪問官方文檔,了解你的 GPU 是否符合支持 Tensorflow 所需的規范。運行 Tensorflow GPU 需要安裝其他軟件,所有信息都可以在下載和設置 TensorFlow [7] 網頁上找到。對于使用 GPU 的更多信息,我建議閱讀第 6 章。
最后,當你完成后,你應該按如下方式禁用虛擬環境:
```
(tensorflow)$ deactivate
```
鑒于本書的介紹性質,我們建議讀者訪問上述官方文檔頁面,來查找安裝 Tensorflow 的其他方法的更多信息。
### 我在 TensorFlow 中的第一個代碼
正如我在開始時提到的那樣,我們將通過很少的理論和大量練習來探索 TensorFlow 星球。開始吧!
從現在開始,最好使用任何文本編輯器編寫 python 代碼并使用擴展名`.py`保存(例如`test.py`)。要運行代碼,使用命令`python test.py`就足夠了。
為了獲得 TensorFlow 程序的第一印象,我建議編寫一個簡單的乘法程序;代碼看起來像這樣:
```py
import tensorflow as tf
a = tf.placeholder("float")
b = tf.placeholder("float")
y = tf.mul(a, b)
sess = tf.Session()
print sess.run(y, feed_dict={a: 3, b: 3})
```
在此代碼中,在導入 Python 模塊`tensorflow`之后,我們定義“符號”變量,稱為占位符,以便在程序執行期間操作它們。然后,我們將這些變量作為參數,調用 TensorFlow 提供的乘法函數。`tf.mul`是 TensorFlow 為操縱張量而提供的眾多數學運算之一。在這個時候,張量可以認為是動態大小的多維數據數組。
主要運算如下表所示:
| 運算 | 描述 |
| --- | --- |
| `tf.add` | 加法 |
| `tf.sub` | 減法 |
| `tf.mul` | 乘法 |
| `tf.div` | 除法 |
| `tf.mod` | 模 |
| `tf.abs` | 返回絕對值 |
| `tf.neg` | 返回負值 |
| `tf.sign` | 返回標志 |
| `tf.inv` | 返回倒數 |
| `tf.square` | 計算平方 |
| `tf.round` | 返回最接近的整數 |
| `tf.sqrt` | 計算平方根 |
| `tf.pow` | 計算指數 |
| `tf.exp` | 計算自然指數 |
| `tf.log` | 計算自然對數 |
| `tf.maximum` | 返回最大值 |
| `tf.minimum` | 返回最小值 |
| `tf.cos` | 計算余弦 |
| `tf.sin` | 計算正弦 |
TensorFlow 還為程序員提供了許多函數,來對矩陣執行數學運算。一些列在下面:
| 運算 | 描述 |
| --- | --- |
| `tf.diag` | 返回具有給定對角線值的對角張量 |
| `tf.transpose` | 返回參數的轉置 |
| `tf.matmul` | 返回由參數列出的兩個張量的張量積 |
| `tf.matrix_determinant` | 返回由參數指定的方陣的行列式 |
| `tf.matrix_inverse` | 返回由參數指定的方陣的逆 |
下一步,最重要的一步是創建一個會話來求解指定的符號表達式。實際上,到目前為止,這個 TensorFlow 代碼尚未執行任何操作。我要強調的是,TensorFlow 既是表達機器學習算法的接口,又是運行它們的實現,這是一個很好的例子。
程序通過使用`Session()`創建會話來與 Tensorflow 庫交互;只有在我們調用`run()`方法時才會創建這個會話,這就是它真正開始運行指定代碼的時候。在此特定示例中,使用`feed_dict`參數將變量的值傳給`run()`方法。這里,相關代碼求解表達式,并且從顯示器返回 9 作為結果。
通過這個簡單的例子,我試圖介紹在 TensorFlow 中編程的常規方法,首先指定整個問題,并最終創建一個可以運行相關計算的會話。
然而,有時我們感興趣的是構造代碼的更多的靈活性,插入操作來構建某個圖,這些操作運行它的一部分。例如,當我們使用 Python 的交互式環境時,例如 IPython [8],就會發生這種情況。為此,TesorFlow 提供了`tf.InteractiveSession()`類。
這種編程模型的動機超出了本書的范圍。但是,為了繼續下一章,我們只需要知道所有信息都在內部保存在圖結構中,它包含所有操作和數據的信息。
該圖描述了數學運算。節點通常實現數學運算,但它們也可以表示數據輸入,輸出結果或讀/寫持久變量。邊描述節點與其輸入和輸出之間的關系,同時攜帶張量,即 TensorFlow 的基本數據結構。
將信息表示為圖允許 TensorFlow 知道事務之間的依賴關系,并異步并行地將操作分配給設備,當這些操作已經具有可用的相關張量(在邊緣輸入中指示)時。
因此,并行性是使我們能夠加速一些計算昂貴的算法的執行的因素之一,但也因為 TensorFlow 已經有效地實現了一組復雜的操作。此外,大多數這些操作都具有關聯的內核,這些內核是為特定設備(如 GPU)設計的操作的實現。下表總結了最重要的操作/內核 [9]:
| 操作組 | 操作 |
| --- | --- |
| 數學 | 加,減,乘,除,指數,對數,大于,小于,等于 |
| 排列 | 連接,切片,分割,常數,階,形狀,打亂 |
| 矩陣 | MatMul,MatrixInverse,MatrixDeterminant |
| 神經網絡 | SoftMax,Sigmoid,ReLU,Convolution2D,MaxPool |
| 檢查點 | 保存,還原 |
| 隊列和同步 | Enqueue,Dequeue,MutexAcquire,MutexRelease |
| 流量控制 | 合并,切換,進入,離開,NextIteration |
### 顯示面板 Tensorboard
為了使其更加全面,TensorFlow 包含了名為 TensorBoard 的可視化工具來調試和優化程序的功能。TensorBoard 可以以圖形方式查看計算圖任何部分的參數和細節的不同類型的統計信息。
TensorBoard 模塊顯示的數據在 TensorFlow 執行期間生成,并存儲在跟蹤文件中,其數據來自摘要操作。在 TensorFlow 的文檔頁面 [10] 中,你可以找到 Python API 的詳細說明。
我們調用它的方式非常簡單:從命令行中使用 Tensorflow 命令啟動服務,它包含要跟蹤的文件作為參數。
```
(tensorflow)$ tensorboard --logdir=
```
你只需要使用`http//localhost:6006 /`從瀏覽器中 [11] 訪問本地套接字 6006。
名為 TensorBoard 的可視化工具超出了本書的范圍。對于 Tensorboard 如何工作的更多詳細信息,讀者可以訪問 TensorFlow 教程頁面中的 TensorBoard 圖形可視化 [12] 部分。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻