# 一、TensorFlow 基本概念
在本章中,我們將介紹以下主題:
* 機器學習和深度學習基礎
* TensorFlow 概述
* Python 基礎
* 安裝 TensorFlow
* 第一個工作會話
* 數據流圖
* TensorFlow 編程模型
* 如何使用 TensorBoard
# 機器學習和深度學習基礎
機器學習是人工智能(尤其是計算機科學)的一個分支,它研究可以從數據中學習的系統和算法,并從中綜合新知識。
“學習”一詞直觀地表明,基于機器學習的系統可能會基于對先前處理的數據的觀察,*改善*的知識,以便在將來實現*更好的結果* ,或為特定系統提供輸出,使其更接近。
由于*過去的經驗*,基于機器學習的程序或系統提高其在特定任務中的表現的能力與*識別數據*的能力緊密相關。 。 因此,這個主題稱為*模式識別*,在人工智能領域具有至關重要的意義,并且引起了越來越多的關注。 它是所有機器學習技術的基礎。
機器學習系統的訓練可以通過不同的方式完成:
* 監督學習
* 無監督學習
## 監督學習
監督學習是機器學習的最常見形式。 在監督學習的情況下,在*訓練階段*期間,將一組示例(訓練集)作為輸入提交給系統,其中,每個示例都被標記為相應的*期望輸出值*。 例如,讓我們考慮一個**分類問題**,其中系統必須將`N`個不同類別之一中的一些實驗觀察結果歸因于已知的類別。 在此問題中,訓練集被表示為類型為`{(X1, Y1), ....., (Xn, Yn)}`的成對序列,其中`Xi`是輸入向量(*特征向量*),`Yi`代表相應輸入的所需類別向量。 大多數受監督的學習算法都有一個特征:通過最小損失函數(*成本函數*)的最小化來執行訓練,該損失函數表示相對于所需輸出系統的*輸出誤差*。
最常用于此類訓練的成本函數計算所需輸出與系統提供的輸出之間的*標準差*。 訓練后,在與訓練集(即所謂的*驗證集*)分離的一組示例中測量模型的*準確率*。

監督學習工作流程
然后在此階段驗證*模型的泛化能力*:對于訓練階段中未使用的輸入,我們將測試是否輸出正確。
### 無監督學習
在無監督學習中,系統提供的訓練示例*未使用相關所屬類別標記*。 因此,該系統開發并組織數據,在其中尋找*共同特征*,然后根據其內部知識對其進行更改。
無監督學習算法特別用于*聚類問題*,其中存在許多輸入示例,您不知道先驗類,甚至不知道可能的類是什么,或者不知道他們有多少類。 當您無法使用監督學習時,這是很明顯的情況,因為您不知道先驗的類別數量。

無監督學習工作流程
### 深度學習
深度學習技術代表了近幾十年來機器學習所邁出的重要一步,它提供了許多應用從未見過的結果,例如圖像和語音識別或**自然語言處理**(**NLP**)。 導致深度學習發展的原因有很多,僅在最近幾十年中它才被置于機器學習領域的中心。 原因之一,也許是主要原因,可以肯定地以硬件的進步為代表,并且隨著新處理器的出現,例如**圖形處理單元**(**GPU**),它們大大減少了使用所需的數據訓練網絡的時間,將它們降低了 10 或 20 倍。另一個原因當然是訓練系統所需的數據集越來越多,訓練一定深度并具有高維度輸入數據的架構所需的數據集。

深度學習工作流程
深度學習基于*人腦*處理信息和學習并對外部刺激做出反應的方式。 它包含在*幾個表示級別*的機器學習模型中,其中更深的級別將先前級別的輸出作為輸入,對其進行轉換并始終進行抽象。 在此假設模型中,每個級別對應于大腦皮層的不同區域:當大腦接收圖像時,它將通過*邊檢測*和*形式感知*等各個階段對其進行處理,即從*原語*表示級別到*最復雜的*。 例如,在圖像分類問題中,每個塊借助于*過濾操作*,以各種抽象級別逐漸提取*特征*,輸入已經處理的數據。
# TensorFlow 概述
[TensorFlow](https://www.tensorflow.org/) 是一個軟件庫,由 Google 機器學習情報研究組織的 Google Brain 團隊開發,目的是進行機器學習和深度神經網絡研究。 然后 TensorFlow 結合了編譯優化技術的計算代數,從而簡化了許多數學表達式的計算,其中問題是執行計算所需的時間。
主要功能包括:
* 定義,優化和有效地計算涉及多維數組(張量)的數學表達式。
* 深度神經網絡和機器學習技術的編程支持。
* 透明使用 GPU 計算,自動管理和優化所使用的相同內存和數據。 您可以編寫相同的代碼,然后在 CPU 或 GPU 上運行它。 更具體地說,TensorFlow 將確定應將計算的哪些部分移至 GPU。
* 跨機器和巨大數據集的計算具有高度可擴展性。

TensorFlow 主頁
TensorFlow 可以使用 Python 和 C++ 支持,并且我們將使用 Python 2.7 進行學習,因為 Python API 確實受到更好的支持并且更容易學習。 Python 的安裝取決于您的系統。 [下載頁面](https://www.python.org/downloads/)包含安裝頁面所需的所有信息。 在下一節中,我們將通過一些編程示例非常簡要地解釋 Python 語言的主要功能。
# Python 基礎
Python 是一種強類型的動態語言(數據類型是必需的,但不必顯式聲明它們),區分大小寫(`var`和`VAR`是兩個不同的變量)和面向對象(Python 中的所有對象都是對象)。
## 語法
在 Python 中,不需要行終止符,并且使用縮進指定塊。 縮進以開始一個塊并刪除縮進以結束它,僅此而已。 需要縮進的指令以冒號(`:`)結尾。 注釋以井號(`#`)開頭,為單行。 多行字符串用于多行注釋。 分配以等號(`=`)完成。 對于相等性測試,我們使用雙等于(`==`)符號。 您可以通過使用`+=`和`-=`后跟加號來增加和減少值。 這適用于許多數據類型,包括字符串。 您可以在同一行上分配和使用多個變量。
以下是一些示例:
```py
>>> myvar = 3
>>> myvar += 2
>>> myvar
5
>>> myvar -= 1
>>> myvar
4
"""This is a comment"""
>>> mystring = "Hello"
>>> mystring += " world."
>>> print mystring
Hello world.
```
以下代碼在一行中交換兩個變量:
```py
>>> myvar, mystring = mystring, myvar
```
## 數據類型
Python 中最重要的結構是列表,元組和字典。 從 2.5 版開始,這些集就集成在 Python 中(對于以前的版本,它們在集庫中可用)。 列表與一維數組相似,但是您可以創建包含其他列表的列表。 字典是包含鍵和值對(哈希表)的數組,元組是不可變的一維對象。 在 Python 中,數組可以是任何類型,因此您可以在列表/字典和元組中混合使用整數,字符串等。 任何類型的數組中第一個對象的索引始終為零。 允許使用負索引并從數組末尾開始計數,`-1`是最后一個元素。 變量可以引用函數。
```py
>>> example = [1, ["list1", "list2"], ("one", "tuple")]
>>> mylist = ["Element 1", 2, 3.14]
>>> mylist [0]
"Element 1"
>>> mylist [-1]
3.14
>>> mydict = {"Key 1": "Val 1", 2: 3, "pi": 3.14}
>>> mydict ["pi"]
3.14
>>> mytuple = (1, 2, 3)
>>> myfunc = len
>>> print myfunc (mylist)
3
```
您可以使用冒號(`:`)獲得數組范圍。 不指定范圍的起始索引意味著第一個元素; 不指示最終索引意味著最后一個元素。 負索引從最后一個元素開始計數(`-1`是最后一個元素)。 然后運行以下命令:
```py
>>> mylist = ["first element", 2, 3.14]
>>> print mylist [:]
['first element', 2, 3.1400000000000001]
>>> print mylist [0:2]
['first element', 2]
>>> print mylist [-3:-1]
['first element', 2]
>>> print mylist [1:]
[2, 3.14]
```
## 字符串
Python 字符串用單引號(`'`)或雙引號(`"`)表示,并允許在另一字符串(`"He said' hello '."It is valid`)上的定界字符串內使用符號。 多行字符串用三引號(或單引號)(`"""`)括起來。 Python 支持 unicode; 只需使用語法:`"This is a unicode string"`。 要將值插入字符串中,請使用`%`運算符(模)和元組。 每個`%`由一個元組元素從左到右替換,并允許使用字典進行替換。
```py
>>> print "Nome: %s\nNumber: %s\nString: %s" % (myclass.nome, 3, 3 * "-")
Name: Poromenos
Number: 3
String: ---
strString = """this is a string
on multiple lines."""
>>> print "This %(verbo)s un %(name)s." % {"name": "test", "verb": "is"}
This is a test.
```
## 控制流
流量控制的指令為`if`,`for`和`while`。 有`select`控制流; 我們使用`if`代替它。 `for`控制流用于枚舉列表的成員。 要獲取數字列表,請使用`range (number)`。
```py
rangelist = range(10)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```
讓我們檢查`number`是否為元組中的數字之一:
```py
for number in rangelist:
if number in (3, 4, 7, 9):
# "Break" ends the for instruction without the else clause
break
else:
# "Continue" continues with the next iteration of the loop
continue
else:
# this is an optional "else"
# executed only if the loop is not interrupted with "break".
pass # it does nothing
if rangelist[1] == 2:
print "the second element (lists are 0-based) is 2"
elif rangelist[1] == 3:
print "the second element is 3"
else:
print "I don't know"
while rangelist[1] == 1:
pass
```
## 函數
函數用關鍵字`def`聲明。 必須在必選參數之后聲明所有可選參數,并且必須為其分配值。 使用參數命名的函數調用函數時,還必須傳遞值。 函數可以返回一個元組(元組拆包可以返回多個值)。 Lambda 函數是內聯的。 參數是通過引用傳遞的,但是不能在函數中更改不可變的類型(元組,整數,字符串等)。 發生這種情況是因為它僅通過元素在內存中的位置傳遞,并且將另一個對象分配給變量會導致較早丟失對象引用。
例如:
```py
# equal to a def f(x): return x + 1
funzionevar = lambda x: x + 1
>>> print funzionevar(1)
2
def passing_example(my_list,my_int):
my_list.append("new element")
my_int = 4
return my_list, my_int
>>> input_my_list = [1, 2, 3]
>>> input_my_int = 10
>>> print passing_example(input_my_list, input_my_int)
([1, 2, 3, 'new element'], 10)
>>> my_list
[1, 2, 3, 'new element']
>>> my_int
10
```
## 類
Python 支持類的多重繼承。 變量和私有方法是通過對流(這不是語言規則)聲明的,方法是在變量和私有方法前加兩個下劃線(`__`)。 我們可以將屬性(屬性)分配給類的任意實例。
以下是一個示例:
```py
class Myclass:
common = 10
def __init__(self):
self.myvariable= 3
def myfunc(self, arg1, arg2):
return self.myvariable
# We create an instance of the class
>>> instance= Myclass()
>>> instance.myfunc(1, 2)
3
# This variable is shared by all instances
>>> instance2= Myclass()
>>> instance.common
10
>>> instance2.common
10
# Note here how we use the class name
# Instead of the instance.
>>> Myclass.common = 30
>>> instance.common
30
>>> instance2.common
30
# This does not update the variable in the class,
# Instead assign a new object to the variable
# of the first instance.
>>> instance.common = 10
>>> instance.common
10
>>> instance2.common
30
>>> Myclass.common = 50
# The value is not changed because "common" is an instance variable.
>>> instance.common
10
>>> instance2.common
50
# This class inherits from Myclass. Multiple inheritance
# is declared like this:
# class AltraClasse(Myclass1, Myclass2, MyclassN)
class AnotherClass(Myclass):
# The topic "self" is automatically passed
# and makes reference to instance of the class, so you can set
# of instance variables as above, but within the class.
def __init__(self, arg1):
self.myvariable= 3
print arg1
>>> instance= AnotherClass ("hello")
hello
>>> instance.myfunc(1, 2)
3
# This class does not have a member (property) .test member, but
# We can add one all instance when we want. Note
# .test That will be a member of only one instance.
>>> instance.test = 10
>>> instance.test
10
```
## 異常
Python 中的異常通過 `try-except`塊[`exception_name`]處理:
```py
def my_func():
try:
# Division by zero causes an exception
10 / 0
except ZeroDivisionError:
print "Oops, error"
else:
# no exception, let's proceed
pass
finally:
# This code is executed when the block
# Try..except is already executed and all exceptions
# Were handled, even if there is a new
# Exception directly in the block.
print "finish"
>>> my_func()
Oops, error.
finish
```
## 導入庫
外部庫通過`import [library name]`導入。 您也可以使用`[libraryname] import [funcname]`表格導入單個函數。 這是一個例子:
```py
import random
from time import clock
randomint = random.randint(1, 100)
>>> print randomint
64
```
# 安裝 TensorFlow
TensorFlow Python API 支持 Python 2.7 和 Python 3.3+。 GPU 版本(僅 Linux)需要 Cuda Toolkit >= 7.0 和 cuDNN >= v2。
在 Python 環境中工作時,建議您使用`virtualenv`。 它將隔離您的 Python 配置用于不同的項目; 使用`virtualenv`不會覆蓋 TensorFlow 所需的 Python 包的現有版本。
## 在 Mac 或 Linux 發行版上安裝
以下是在 Mac 和 Linux 系統上安裝 TensorFlow 的步驟:
1. 如果尚未安裝 PIP 和 Virtualenv(可選),請首先安裝它們:
對于 Ubuntu/Linux 64 位:
```py
$ sudo apt-get install python-pip python-dev python-virtualenv
```
對于 Mac OSX:
```py
$ sudo easy_install pip
$ sudo pip install --upgrade virtualenv
```
2. 然后,您可以創建虛擬環境 Virtualenv。 以下命令在`~ / tensorflow`目錄中創建虛擬環境 virtualenv:
```py
$ virtualenv --system-site-packages ~/tensorflow
```
3. 下一步是如下激活 Virtualenv:
```py
$ source ~/tensorflow/bin/activate.csh
(tensorflow)$
```
4. 此后,我們正在使用的環境的名稱在命令行之前。 一旦激活,PIP 將用于在其中安裝 TensorFlow。
對于 Ubuntu/Linux 64 位 CPU:
```py
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
```
對于 Mac OSX,CPU:
```py
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
```
如果您想將 GPU 卡與 TensorFlow 一起使用,請安裝另一個包。 我建議您訪問官方文檔,以查看您的 GPU 是否滿足支持 TensorFlow 所需的規格。
### 注意
要使用 TensorFlow 啟用 GPU,有關完整的說明您可以參考[這里](https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#optional-linux-enable-gpu-support)。
最后,完成后,必須禁用虛擬環境:
```py
(tensorflow)$ deactivate
```
### 注意
鑒于本書的介紹性,我建議讀者訪問[下載和設置 TensorFlow 頁面](https://www.tensorflow.org/versions/r0.7/get_started/os_setup.html#download-and-setup)以查找有關其他安裝 TensorFlow 的方法的更多信息。
## 在 Windows 上安裝
如果無法獲得基于 Linux 的系統,則可以在虛擬機上安裝 Ubuntu。 只需使用名為 VirtualBox 的免費應用,即可在 Windows 上創建虛擬 PC 并在后者中安裝 Ubuntu。 因此,您可以嘗試操作系統,而無需創建分區或處理繁瑣的過程。
### 注意
安裝 VirtualBox 后,您可以安裝 [Ubuntu](http://www.ubuntu.com),然后按照 Linux 機器的安裝步驟來安裝 TensorFlow。
## 從源安裝
但是,PIP 安裝可能會引起問題,[尤其是在使用可視化工具 TensorBoard 時](https://github.com/tensorflow/tensorflow/issues/530)。 要解決此問題,建議您通過以下步驟構建并安裝 TensorFlow,以啟動表單源文件:
1. 克隆 TensorFlow 存儲庫:
```py
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
```
2. 按照[說明](http://bazel.io/docs/install.html)安裝 Bazel(依賴項和安裝程序).
3. 運行 Bazel 安裝程序:
```py
chmod +x bazel-version-installer-os.sh
./bazel-version-installer-os.sh --user
```
4. 安裝 Python 依賴項:
```py
sudo apt-get install python-numpy swig python-dev
```
5. 在 TensorFlow 下載的存儲庫中配置安裝(GPU 還是沒有 GPU?):
```py
./configure
```
6. 使用`bazel`創建自己的 TensorFlow PIP 包:
```py
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
```
7. 要使用 GPU 支持進行構建,請再次使用`bazel build -c opt --config=cuda`和
```py
//tensorflow/tools/pip_package:build_pip_package
```
8. 最后,安裝 TensorBoard,其中`.whl`文件的名稱將取決于您的平臺。
```py
pip install /tmp/tensorflow_pkg/tensorflow-0.7.1-py2-none- linux_x86_64.whl
```
9. 祝好運!
### 注意
有關更多信息,請參考[這里](https://www.tensorflow.org/versions/r0.7/get_started/os_setup.html#installation-for-linux)。
## 測試您的 TensorFlow 安裝
打開一個終端并輸入以下代碼行:
```py
>>> import tensorflow as tf
>>> hello = tf.constant("hello TensorFlow!")
>>> sess=tf.Session()
```
要驗證您的安裝,只需鍵入:
```py
>>> print(sess.run(hello))
```
您應該具有以下輸出:
```py
Hello TensorFlow!
>>>
```
# 第一個工作會話
最后,是時候從理論轉向實踐了。 我將使用 Python 2.7 IDE 編寫所有示例。 要初步了解如何使用 TensorFlow,請打開 Python 編輯器并編寫以下代碼行:
```py
x = 1
y = x + 9
print(y)
import tensorflow as tf
x = tf.constant(1,name='x')
y = tf.Variable(x+9,name='y')
print(y)
```
如您在前三行中容易理解的那樣,將等于`1`的常量`x`添加到`9`以設置變量`y`的新值,然后得出變量的最終結果。 變量`y`打印在屏幕上。
在最后四行中,我們已根據 TensorFlow 庫轉換了前三個變量。
如果運行程序,則將顯示以下輸出:
```py
10
<tensorflow.python.ops.variables.Variable object at 0x7f30ccbf9190>
```
程序示例的前三行的 TensorFlow 轉換會產生不同的結果。 讓我們分析一下:
1. 如果您想使用 TensorFlow 庫,請不要錯過以下聲明。 它告訴我們我們正在導入庫并將其命名為`tf`:
```py
import tensorflow as tf
```
2. 我們創建一個名為`x`的常數,其值等于 1:
```py
x = tf.constant(1,name='x')
```
3. 然后,我們創建一個名為`y`的變量。 通過簡單的公式`y=x+9`定義此變量:
```py
y = tf.Variable(x+9,name='y')
```
4. 最后,打印出結果:
```py
print(y)
```
那么我們如何解釋不同的結果呢? 區別在于變量定義。 實際上,變量`y`并不代表`x + 9`的當前值,而是表示:*在計算變量`y`時,取常數`x`的值并將其加 9*。 這就是從未執行`y`值的原因。 在下一節中,我將嘗試修復它。
因此,我們打開 Python IDE 并輸入以下行:

運行前面的代碼,輸出結果最終如下:
```py
10
```
我們刪除了打印指令,但是已經初始化了模型變量:
```py
model = tf.initialize_all_variables()
```
而且,大多數情況下,我們創建了一個用于計算值的會話。 在下一步中,我們運行先前創建的模型,最后僅運行變量`y`并打印出其當前值。
```py
with tf.Session() as session:
session.run(model)
print(session.run(y))
```
這是允許正確結果的魔術。 在此基本步驟中,在`session`中創建了稱為數據流圖的執行圖,其中包含變量之間的所有依賴關系。 `y`變量取決于變量`x`,并且通過向其添加`9`來轉換該值。 在執行會話之前不會計算該值。
最后一個示例在 TensorFlow 中引入了另一個重要功能,即數據流圖。
# 數據流圖
機器學習應用是重復計算復雜數學表達式的結果。 在 TensorFlow 中,使用數據流圖描述了計算,其中圖中的每個*節點*代表數學運算的實例(`multiply`,`add`等), 每個*邊*是執行操作的多維數據集(*張量*)。
TensorFlow 支持這些構造和這些運算符。 讓我們詳細看看 TensorFlow 如何管理節點和邊:
* **節點**:在 TensorFlow 中,每個節點代表一個操作的實例。 每個操作都有`>=`輸入和`>= 0`輸出。
* **邊**:在 TensorFlow 中,有兩種類型的邊:
* **正常邊**:它們是數據結構(張量)的載體,其中一個操作的輸出(來自一個節點)成為另一操作的輸入。
* **特殊邊**:這些邊不是節點(運算符)的輸出與另一節點的輸入之間的數據載體。 特殊邊表示兩個節點之間的控制依賴關系。 假設我們有兩個節點`A`和`B`,并且有一個特殊的邊將`A`連接到`B`; 這意味著`B`僅在`A`中的操作結束時才開始操作。 數據流圖中使用特殊邊來設置張量上的操作之間的事前關系。
讓我們更詳細地探討數據流圖中的一些組件:
* **操作**:這表示一種抽象計算,例如對矩陣進行相加或相乘。 一個操作管理張量。 它可以是多態的:同一操作可以操縱不同的張量元素類型。 例如,添加兩個`int32`張量,添加兩個浮點張量,依此類推。
* **內核**:這表示該操作的具體實現。 內核定義特定設備上操作的實現。 例如,加矩陣運算可以具有 CPU 實現和 GPU 實現。 在以下部分中,我們介紹了在 TensorFlow 中創建`del`執行圖的會話概念。 讓我們解釋一下這個主題:
* **會話**:當客戶端程序必須與 TensorFlow 運行時系統建立通信時,必須創建一個會話。 為客戶端創建會話后,便會創建一個初始圖,該圖為空。 它有兩種基本方法:
* `session.extend`:在計算中,用戶可以擴展執行圖,請求添加更多操作(節點)和邊(數據)。
* `session.run`:使用 TensorFlow,使用一些圖創建會話,并執行這些完整圖以獲得一些輸出,或者有時,使用運行調用來執行子圖數千/百萬次。 基本上,該方法運行執行圖以提供輸出。

數據流圖中的組件
# TensorFlow 編程模型
采用數據流圖作為執行模型,您可以使用隱藏所有復雜性的單個編程接口將數據流設計(圖構建和數據流)與其執行(CPU,GPU 卡或組合)分開。 它還定義了 TensorFlow 中的編程模型應該是什么樣的。
讓我們考慮將兩個整數相乘的簡單問題,即`a`和`b`。
以下是此簡單問題所需的步驟:
1. 定義并初始化變量。 每個變量都應定義當前執行的狀態。 在 Python 中導入 TensorFlow 模塊后:
```py
import tensorflow as tf
```
2. 我們定義了計算中涉及的變量`a`和`b`。 這些是通過稱為`placeholder`的基本結構定義的:
```py
a = tf.placeholder("int32")
b = tf.placeholder("int32")
```
3. `placeholder`允許我們創建操作并建立計算圖,而無需*數據*。
4. 然后,我們將這些變量用作 TensorFlow 函數`mul`的輸入:
```py
y = tf.mul(a,b)
this function will return the result of the multiplication the input integers a and b.
```
5. 管理執行流程,這意味著我們必須構建一個*會話*:
```py
sess = tf.Session()
```
6. 可視化結果。 我們在變量`a`和`b`上運行模型,通過先前定義的占位符將數據饋入數據流圖中。
```py
print sess.run(y , feed_dict={a: 2, b: 5})
```
## 如何使用 TensorBoard
TensorBoard 是一個可視化工具,致力于分析數據流圖以及更好地理解機器學習模型。 它可以以圖形方式查看有關計算圖的任何部分的參數和詳細信息的不同類型的統計信息。 通常,計算圖可能非常復雜。 深度神經網絡最多可包含 36,000 個節點。 因此,TensorBoard 將節點折疊成高級塊,從而突出顯示具有相同結構的組。 這樣做可以更好地分析圖,僅關注計算圖的核心部分。 而且,可視化過程是交互式的; 用戶可以平移,縮放和展開節點以顯示詳細信息。
下圖顯示了使用 TensorBoard 的神經網絡模型:

TensorBoard 可視化示例
TensorBoard 的算法將節點折疊為高級塊,并突出顯示具有相同結構的組,同時還分離出高級節點。 可視化工具也是交互式的:用戶可以平移,放大,擴展和折疊節點。
TensorBoard 在機器學習模型的開發和調整中同樣有用。 因此,TensorFlow 允許您在圖中插入所謂的**摘要操作**。 這些摘要操作監視在日志文件中寫入的更改值(在執行計算期間)。 然后,將 TensorBoard 配置為觀看帶有摘要信息的日志文件,并顯示該信息隨時間的變化。
讓我們考慮一個基本的例子,以了解 TensorBoard 的用法。 我們有以下示例:
```py
import tensorflow as tf
a = tf.constant(10,name="a")
b = tf.constant(90,name="b")
y = tf.Variable(a+b*2, name="y")
model = tf.initialize_all_variables()
with tf.Session() as session:
merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter\
("/tmp/tensorflowlogs",session.graph)
session.run(model)
print(session.run(y))
```
得到以下結果:
```py
190
```
讓我們指向會話管理。 要考慮的第一條指令如下:
```py
merged = tf.merge_all_summaries()
```
該指令必須合并默認圖中收集的所有摘要。
然后我們創建`SummaryWriter`。 它將將從代碼執行中獲得的所有摘要(在本例中為執行圖)寫入`/tmp/tensorflowlogs`目錄:
```py
writer = tf.train.SummaryWriter\
("/tmp/tensorflowlogs",session.graph)
```
最后,我們運行模型并構建數據流圖:
```py
session.run(model)
print(session.run(y))
```
TensorBoard 的使用非常簡單。 讓我們打開一個終端并輸入以下內容:
```py
$tensorboard --logdir=/tmp/tensorflowlogs
```
出現如下信息:
```py
startig tensorboard on port 6006
```
然后,通過打開 Web 瀏覽器,我們應該顯示帶有輔助節點的數據流圖:

使用 TensorBoard 顯示數據流圖
現在,我們將能夠探索數據流圖:

使用 TensorBoard 探索數據流圖顯示
TensorBoard 對常量和摘要節點使用特殊的圖標。 總而言之,我們在下圖中報告顯示的節點符號表:

TensorBoard 中的節點符號
# 總結
在本章中,我們介紹了主要主題:**機器學習**和**深度學習**。 機器學習探索可以學習數據并進行數據預測的算法的研究和構建,而深度學習正是基于*人腦處理信息和學習*的方式, [對外部刺激作出反應](https://en.wikipedia.org/wiki/Algorithm)。
在這個龐大的科學研究和實際應用領域中,我們可以牢固地放置 **TensorFlow** 軟件庫,該庫由 Google 人工智能研究小組(Google Brain Project)開發,并于 2015 年 11 月 9 日作為開源軟件發布 。
在選擇 **Python** 編程語言作為示例和應用的開發工具之后,我們了解了如何安裝和編譯該庫,然后進行了第一個工作會話。 這使我們可以介紹 TensorFlow 和**數據流圖**的執行模型。 它引導我們定義了我們的編程模型。
本章以如何使用重要工具調試機器學習應用的示例結尾: **TensorBoard**。
在下一章中,我們將繼續進入 TensorFlow 庫,以展示其多功能性。 從基本概念張量開始,我們將看到如何將庫用于純數學應用。
- 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
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻