TensorFlow 是一種採用數據流圖(data flow graphs),用於數值計算的開源軟件庫。其中 Tensor 表明傳遞的數據爲張量(多維數組),Flow 表明使用計算圖進行運算。數據流圖用「結點」(nodes)和「邊」(edges)組成的有向圖來描述數學運算。「結點」通常用來表示施加的數學操做,但也能夠表示數據輸入的起點和輸出的終點,或者是讀取/寫入持久變量(persistent variable)的終點。邊表示結點之間的輸入/輸出關係。這些數據邊能夠傳送維度可動態調整的多維數據數組,即張量(tensor)。node
在 Tensorflow 中,全部不一樣的變量和運算都是儲存在計算圖。因此在咱們構建完模型所須要的圖以後,還須要打開一個會話(Session)來運行整個計算圖。在會話中,咱們能夠將全部計算分配到可用的 CPU 和 GPU 資源中。 算法
如上所示咱們構建了一個加法運算的計算圖,第二個代碼塊並不會輸出計算結果,由於咱們只是定義了一張圖,而沒有運行它。第三個代碼塊纔會輸出計算結果,由於咱們須要建立一個會話(Session)才能管理 TensorFlow 運行時的全部資源。但計算完畢後須要關閉會話來幫助系統回收資源,否則就會出現資源泄漏的問題。數組
TensorFlow 中最基本的單位是常量(Constant)、變量(Variable)和佔位符(Placeholder)。常量定義後值和維度不可變,變量定義後值可變而維度不可變。在神經網絡中,變量通常可做爲儲存權重和其餘信息的矩陣,而常量可做爲儲存超參數或其餘結構信息的變量。在上面的計算圖中,結點 1 和結點 2 都是定義的常量 tf.constant()。咱們能夠分別聲明不一樣的常量(tf.constant())和變量(tf.Variable()),其中 tf.float 和 tf.int 分別聲明瞭不一樣的浮點型和整數型數據。網絡
TensorFlow 一樣還支持佔位符,佔位符並無初始值,它只會分配必要的內存。在會話中,佔位符可使用 feed_dict 饋送數據。機器學習
feed_dict 是一個字典,在字典中須要給出每個用到的佔位符的取值。在訓練神經網絡時須要每次提供一個批量的訓練樣本,若是每次迭代選取的數據要經過常量表示,那麼 TensorFlow 的計算圖會很是大。由於每增長一個常量,TensorFlow 都會在計算圖中增長一個結點。因此說擁有幾百萬次迭代的神經網絡會擁有極其龐大的計算圖,而佔位符卻能夠解決這一點,它只會擁有佔位符這一個結點。學習
在 TensorFlow 中,張量是計算圖執行運算的基本載體,咱們須要計算的數據都以張量的形式儲存或聲明。以下所示,該教程給出了各階張量的意義。blog
零階張量就是咱們熟悉的標量數字,它僅僅只表達了量的大小或性質而沒有其它的描述。一階張量即咱們熟悉的向量,它不只表達了線段量的大小,同時還表達了方向。通常來講二維向量能夠表示平面中線段的量和方向,三維向量和表示空間中線段的量和方向。二階張量即矩陣,咱們能夠看做是填滿數字的一個表格,矩陣運算即一個表格和另一個表格進行運算。固然理論上咱們能夠產生任意階的張量,但在實際的機器學習算法運算中,咱們使用得最多的仍是一階張量(向量)和二階張量(矩陣)。教程