TensorFlow

DistBelief

從2010年開始，Google大腦建立DistBelief作為他們的第一代專有的機器學習系統。50多個團隊在Google和其他Alphabet公司在商業產品部署了DistBelief的深度學習神經網路，包括Google搜尋、Google語音搜尋、廣告、Google 相簿、Google地圖、Google街景、Google翻譯和YouTube。Google指派電腦科學家，如Geoffrey Hinton和Jeff Dean，簡化和重構DistBelief的程式碼庫，使其變成一個更快、更健壯的應用級別程式碼庫，形成了TensorFlow。2009年，Hinton領導的研究小組大大減少使用DistBelief的神經網路的錯誤數量，通過Hinton在廣義反向傳播的科學突破。最值得注意的是，Hinton的突破直接使Google語音辨識軟體中的錯誤減少至少25%。

TensorFlow

TensorFlow是Google大腦的第二代機器學習系統。
從0.8.0版本（發布於2016年4月）開始原生的支援分散式執行。
從0.9.0版本（發布於2016年6月）開始支援iOS。
從0.12.0版本（發布於2016年12月）開始支援Windows系統。該移植程式碼主要由微軟貢獻。
1.0.0版本發布於2017年2月11日。雖然參考實現執行在單台裝置，TensorFlow可以執行在多個CPU和GPU（和可選的CUDA擴充和圖形處理器通用計算的SYCL擴充）。TensorFlow可用於64位元Linux、macOS和Windows，以及移動計算平台，包括Android和iOS。
TensorFlow的計算使用有狀態的資料流圖表示。TensorFlow的名字來源於這類神經網路對多維陣列執行的操作。這些多維陣列被稱為張量（Tensor）。2016年6月，Jeff Dean稱在GitHub有1500個庫提到了TensorFlow，其中只有5個來自Google。

張量處理單元（TPU）

2016年5月，Google宣布了張量處理單元（TPU），一個專為機器學習和TensorFlow全客製化的專用積體電路。TPU是一個可程式化的人工智慧加速器，提供高吞吐量的低精度計算（如8位元），面向使用或執行模型而不是訓練模型。Google宣布他們已經在資料中心中執行TPU長達一年多，發現它們對機器學習提供一個數量級更優的每瓦特效能。
2017年5月Google宣布第二代張量處理單元，並在Google Compute Engine中可用。第二代TPU提供最高180 teraflops效能，組裝成64個TPU的叢集時提供最高11.5 petaflops效能。

TensorFlow Lite

2017年5月Google宣布從Android Oreo開始，提供一個專用於Android開發的軟體棧TensorFlow Lite。

應用

Google於2015年10月26日正式發布了RankBrain，由TensorFlow支援。

特性

TensorFlow提供了一個Python API，以及C++、Haskell、Java、Go和Rust API。第三方包可用於 C#、.NET Core、Julia、R和Scala。
TensorFlow的底層核心引擎由C++實現，通過 gRPC 實現網路互訪、分散式執行。雖然它的Python/C++/Java API共用了大部分執行程式碼，但是有關於反向傳播梯度計算的部分需要在不同語言單獨實現。目前只有Python API較為豐富的實現了反向傳播部分。所以大多數人使用Python進行模型訓練，但是可以選擇使用其它語言進行線上推理。
TensorFlow在Windows和Linux上支援使用 Bazel 或 CMake 構建，在某些平台上也支援直接使用 GNU Make 進行編譯。

例子

例：Hello World。
import tensorflow as tfhw = tf.constant("Hello World")with tf.Session() as sess:
 print(sess.run(hw))
例：兩個矩陣相乘。
import tensorflow as tf# Build a dataflow graph.c = tf.constant([[1.0, 2.0], [3.0, 4.0]])d = tf.constant([[1.0, 1.0], [0.0, 1.0]])e = tf.matmul(c, d)# Construct a `Session` to execute the graph.with tf.Session() as sess:
  # Execute the graph and store the value that `e` represents in `result`.
  result = sess.run(e)print(result)
例：使用Feeding在執行時傳入參數
import tensorflow as tf# Build a dataflow graph.c = tf.constant([[1.0, 2.0], [3.0, 4.0]])d = tf.constant([[1.0, 1.0], [0.0, 1.0]])e = tf.matmul(c, d)# Construct a `Session` to execute the graph.sess = tf.Session()# Execute the graph and store the value that `e` represents in `result`.result = sess.run(e,feed_dict={c:[[0.0, 0.0], [3.0, 4.0]]})print(result)sess.close()
TensorFlow的一大特色是其圖中的節點可以是帶狀態的。
例：使用預留位置
input_placeholder = tf.placeholder(tf.int32) 
sess = tf.Session() 
print (sess.run(input_placeholder, feed_dict={input_placeholder: 2}))sess.close()
例：使用變數、給變數賦值
使用tf.get_variable()建立變數。tf.get_variable() 的前兩個參數是必需的，其餘參數是可選的。tf.get_variable(name，shape)。name 是一個唯一標識這個變數物件的字串。它必須相對於全域圖是唯一的，所以要明了你使用過的所有命名，確保沒有重複。shape 是與張量形狀對應的整數陣列，按順序每個維度只有一個整數。一個 3x8 矩陣形狀是 [3, 8]。要建立一個標量，就需要使用形狀為 [] 的空列表。有兩種將值放入變數的方法：初始化器和 tf.assign()。初始化器應該把聲明（tf.constant_initializer）與執行初始化（tf.global_variables_initializer）兩種節點配合使用。
import tensorflow as tfcount_variable = tf.get_variable("count", [])zero_node = tf.constant(0.)assign_node = tf.assign(count_variable, zero_node)sess = tf.Session()sess.run(assign_node)print (sess.run(count_variable))
 
const_init_node = tf.constant_initializer(0.)count_variable1 = tf.get_variable("count1", [], initializer=const_init_node)init = tf.global_variables_initializer()sess.run(init)print (sess.run(count_variable1))sess.close()
例：帶狀態的圖
import tensorflow as tf# Build a dataflow graph.count = tf.Variable([0],trainable=False);init_op = tf.global_variables_initializer()update_count = count.assign_add(tf.constant([2]))# Construct a `Session` to execute the graph.sess = tf.Session()sess.run(init_op)for step in range(10):
    result = sess.run(update_count)
    print("step %d: count = %g" % (step,result))sess.close()
例：梯度計算
import tensorflow as tf# Build a dataflow graph.filename_queue = tf.train.string_input_producer(['1.txt'],num_epochs=1)reader = tf.TextLineReader()key,value = reader.read(filename_queue)num = tf.decode_csv(value,record_defaults=[[0]])x = tf.Variable([0])loss = x * numgrads = tf.gradients([loss],x)grad_x = grads[0]def train_fn(sess):
  train_fn.counter += 1
  result = sess.run(grad_x)
  print("step %d: grad = %g" % (train_fn.counter,result))train_fn.counter = 0sv = tf.train.Supervisor()tf.train.basic_train_loop(sv,train_fn)
假設1.txt的內容為：
3
2
5
8
那麼上述程式的輸出應該為：
step 1: grad = 3
step 2: grad = 2
step 3: grad = 5
step 4: grad = 8

應用

廣泛的應用程式使用TensorFlow作為基礎，其中它已成功實現自動化圖像字幕軟體，例如DeepDream。2015年10月26日，Google正式啟用了由TensorFlow提供支援的RankBrain。RankBrain現在處理大量的搜尋查詢，替換和補充傳統的靜態演算法搜尋結果。