TensorFlow 是一個開發源代碼軟件庫,它能夠進行高性能的數值計算與分析,藉助其靈活的架構,能夠將其部署到多種平臺(CPU、GPU、TPU)和設備(桌面設備、移動設備、集羣)。TensorFlow 爲機器學習和深度學習提供了不少強有力的支持,本篇文章小編爲你們整理了不少 TensorFlow 的基礎編程知識,很是適合初學者學習,一塊兒來看看吧!node
TensorFlow 顧名思義,是由 Tensor + Flow 組成,Tensor 叫作張量,主要起到數據結構的做用,Flow 叫作流,用來表示計算模型,即張量之間經過計算而轉換的過程 。TensorFlow 是一個提供計算圖的形式表述計算的編程系統,每個計算都是計算圖上的一個節點,節點之間的邊描述的計算之間的關係。python
#一個簡單的計算圖 node1 = tf.constant(3.0,tf.float32,name="node1") node2 = tf.constant(4.0,tf.float32,name="node2") node3 = tf.add(node1,node2) print(node3)
該代碼輸出結果爲:編程
Tensor( "Add:0", shape( ), dtype = float32 )
要注意的是,這裏輸出的結果不是一個具體的數字,而是一個張量的結構。
數組
建立計算圖只是創建了靜態的計算模型,只有執行對話才能提供數據並得到結果。瀏覽器
#創建對話並顯示運行結果 sess = tf.Session() print("運行sess.run(node3)的結果是:", sess.run(node3)) #關閉session sess.close()
該代碼輸出結果爲:運行 sess.run (node3) 的結果是:7.0微信
在 TensorFlow 中,全部的數據都經過張量的形式來表示。
張量能夠簡單的理解爲多維數據:session
零階張量表示標量,即一個數;數據結構
一階張量表示想來,即一維數組;架構
張量沒有真正保存數字,它保存的只是計算過程。機器學習
Tensor( "Add:0", shape( ), dtype = float32 )
由名字 name,形狀 shape 和類型 type 三部分組成:
例如:
張量的階表示了張量的維度
階爲1的張量等價於向量;
階爲2的張量等價於矩陣,經過 t [ i, j ]獲取元素;
階爲3的張量,經過 t [ i, j, k ]獲取元素。
TensorFlow 支持14種類型:
import tensorflow as tf a = tf.constant([1,2], name="a") b = tf.constant([2.0,3.0], name="b") result = a + b
該代碼運行會報錯,由於 TensorFlow 會對參與運算的全部張量進行類型的檢查,發現類型不匹配時就會報錯。
計算圖中的節點就是操做
一次加法是一個操做
一次乘法也是一個操做
構建一些變量的初始值也是一個操做
每一個運算操做都是屬性,它在構建圖的時候須要肯定下來
操做之間存在順序關係,這些操做之間的依賴就是 「邊」。
會話擁有並管理 TensorFlow 程序運行時的全部資源,當全部計算完成以後須要關閉會話幫助系統回收資源。
import tensorflow as tf #定義計算圖 a = tf.constant([1,2,3]) #建立一個會話 sess = tf.Session() #使用這個建立好的會話來獲得關心的運算結果 print(sess.run(a)) #關閉會話使得本次運行中使用的資源能夠被釋放 sess.close()
這裏須要注意的是:調用Session.close( )函數來關閉會話並釋放資源,當程序由於異常退出時,關閉會話函數可能就不會被執行從而致使資源泄露。
所以如下代碼能夠避免該問題:
import tensorflow as tf #定義計算圖 a = tf.constant([1,2,3]) #建立一個會話,並經過python中的上下文管理器來管理該會話 with tf.Session() as sess: #使用這個建立好的會話來獲得關心的運算結果 print(sess.run(a)) #關閉會話使得本次運行中使用的資源能夠被釋放 #當上下文退出時會話關閉,資源釋放
在交互式環境下,python 腳本或者 Jupyter 編輯器,經過設置默認會話來獲取張量的取值更加方便。
tf.InteractiveSession 使用這個函數會自動將生成的會話註冊爲默認會話
node1 = tf.constant(3.0,tf.float32,name="node1") node2 = tf.constant(4.0,tf.float32,name="node2") node3 = tf.add(node1,node2) sess = tf.InteractiveSession() print(node3.eval()) sess.close()
常量 constant
常量是在運算過程當中值不會改變的單元,在 TensorFlow 中無需進行初始化操做
常量的建立語句爲:
constant_name = tf.constant(value)
變量是在運行過程當中值會改變的單元,在 TensorFlow 中須要進行初始化操做
變量的建立語句爲:
variable_name = tf.Variable (value, name)
個別變量初始化:
init_op = variable_name.initializer( )
全部變量初始化:
init_op = tf.global_variable_initializer( )
注意:使用了 Variable 變量類型,不進行初始化數值會出現運行錯誤。
TensorFlow 中的 Variable 變量類型,在定義時須要初始化,但有些變量定義時並不知道其數值,只有當真正開始運行程序時,才由外部輸入,好比訓練數據,這時須要用到佔位符。
tf.placeholder 佔位符,是 TensorFlow 中特有的一種數據結構,相似於動態變量或函數的參數。
佔位符的函數接口以下:
tf.placeholder(dtype, shape = None, name = None) #此代碼生成一個2*3的二維數組,矩陣中每一個元素類型都是tf.float32 x = tf.placeholder(tf.float32,[2,3],name="tx")
若是構建了一個包含 placeholder 操做的計算圖,當在 session 中調用run 方法時,placeholder 佔用的變量必須經過 feed_dict 參數傳遞進去,不然會報錯。
TensorBoard 是TensorFlow 的可視化工具
經過 TensorFlow 程序運行過程當中輸出的日誌文件可視化 TenorFlow 程序的運行狀態。
運行以後會在指定目錄裏產生日誌文件
TensorBoard 不須要額外安裝,在 TenorFlow 安裝時已經自動完成。
在 Anaconda Prompt 中先進入日誌存放的目錄,再運行 TensorBoard,並將日誌地址指向程序日誌輸出的地址。
命令:
tensorboard --logdir=/path/log
在瀏覽器訪問網址:http://localhost:6006
TensorBoard 經常使用API
---------End---------
關注後回覆「w」,加我私人微信
推薦閱讀:
閱讀是投資本身最有效的方式
自律是一種覺醒