TensorFlow中的計算圖學習
阿新 • • 發佈:2018-11-16
簡介:
官網上對TensorFlow的介紹是: 一個使用資料流圖(data flow graphs)技術來進行數值計算的開源軟體庫
(有點類似於這樣 :)
TensorFlow包含構建資料流圖與計算資料流圖等基本步驟,圖中的節點表示數學操作,圖中連結各節點的邊表示多維陣列,即:tensors(張量)。 張量是TensorFlow最核心的元件,所有運算和優化都是基於張量進行的。張量是基於向量和矩陣的推廣,可以將標量看為零階張量,向量看做一階張量,矩陣看做二階張量。
tensorflow程式一般分為兩個階段:
-
1、定義計算圖所有的計算
-
2、在session中執行計算
在這幾行程式碼中完全體現了這兩項操作
( 還額外包括了 :
-
將資料表示為tensors;
-
使用Variables來保持狀態資訊;
-
分別使用feeds和fetches來填充資料和抓取任意的操作結果; )
import tensorflow as tf a =tf.placeholder("float") b =tf.placeholder("float") y = tf.multiply(a,b) sess = tf.Session() print(sess.run(y, feed_dict={a: 3, b: 3})) --------------------- 轉載於 作者:Jasen_Fu
張量的階數:
TensorFlow用張量表示所有的資料,張量可看成一個n維的陣列或列表,在圖中的節點之間流通。張量的維數稱為階,在另一片文中有相應的一些介紹。
計算圖
在tensorflow程式中,系統會自動給引數一個預設的計算圖,可以通過tf.get_default_graph()函式獲取。
import tensorflow as tf x = tf.constant(10) y = tf.constant(15) print(x.graph) 結果為: <tensorflow.python.framework.ops.Graph object at 0x000001AE613E8E80>
tensorflow可以通過tf.Graph函式生成新的計算圖。不同計算圖上的張量和運算都不會共享
g1=tf.Graph() with g1.as_default(): # 在計算圖g1中定義變數'v',並設定初始值為0。 v=tf.get_variable('v',initializer=tf.zeros_initializer()(shape = [1])) g2=tf.Graph() with g2.as_default(): # 在計算圖g2中定義變數'v',並設定初始值微1。 v=tf.get_variable('v',initializer=tf.ones_initializer()(shape = [1])) # 在計算圖g1中讀取變數'v'的取值 with tf.Session(graph=g1) as sess: tf.global_variables_initializer().run() with tf.variable_scope('',reuse=True): # 在計算圖g1中,變數'v'的取值應該為0,下一行程式碼會輸出[0.]。 print(sess.run(tf.get_variable('v'))) # 在計算圖g2中讀取變數'v'的取值 with tf.Session(graph=g2) as sess: tf.global_variables_initializer().run() with tf.variable_scope('',reuse=True): # 在計算圖g2中,變數'v'的取值應該為1,下一行程式碼會輸出[1.]。 print(sess.run(tf.get_variable('v')))
############# 程式碼借鑑於https://www.cnblogs.com/hypnus-ly/p/8040951.html 這位朋友的部落格#######
tensorflow中的計算圖不僅可以用來隔離張量和計算,它還提供了管理張量和計算的機制,具體的可以到上面這位朋友的部落格中看。
import tensorflow as tf
x = tf.constant(10)
y = tf.constant(15)
print(x+y)
結果: Tensor("add_1:0", shape=(), dtype=int32)
我們觀察一下這裡的輸出資訊,一共是三個,代表了張量在儲存時候的三種屬性:
名字(name)、維度(shape)和型別(type)
其中,name屬性以“node:src_output”的形式表示,node表示節點的名稱,src_output表示當前張量來自節點的第幾個輸出。
還可以通過result.get_shape函式來獲取結果張量的維度資訊。
tensorflow中session的講解
建立session的三種方式:
# 1、 建立一個會話 with tf.Session() as sess: print(sess.run(result))
# tensorflow中需要手動指定預設會話,當該會話指定後,可以通過tf.Tensor.eval函式來計算一個張量的取值。 # 2、 建立一個預設的會話 sess=tf.Session() with sess.as_default(): # 需要在這裡先指定一個會話,也就是指定一個sess的名稱(有點類似於namespace吧) print(result.eval())
# 3、 建立一個會話 sess=tf.Session()
# 下面兩個命令等價 print(sess.run(result)) print(result.eval(session=sess))
# 在互動式環境下,使用設定預設會話的方法來獲取張量的取值更加方便,tensorflow提供了一種在互動式環境下直接構建 # 預設會話的函式,tf.InteractiveSession。該函式會自動將生成的會話註冊為預設會話。 sess= tf.InteractiveSession() print(result.eval()) sess.close()