tensorflow程式中的計算過程可以表示為乙個計算圖(computation graph, 也可稱為有向圖(directed graph)),其作用與外觀都可模擬為程式流程圖。
張量是在邊中流動的資料,其資料型別可以在程式設計時事先定義,也可根據計算圖中的上下文來推斷。
計算圖的作用可以模擬為程式的流程圖,可以使用tensorboard工具視覺化tensorflow程式的計算圖。用以下例子簡單的向量相加介紹計算圖:
import tensorflow as tf
a = tf.constant([1.0,2.0], name="a")
b = tf.constant([3.0,4.0], name="b")
result = a+b
print (a.graph is tf.get_default_graph())
print (b.graph is tf.get_default_graph())
編寫tensorflow程式時,系統會自動維護乙個預設的計算圖,上面**是判斷 a 和 b 是否屬於預設的計算圖,結果會輸出 true, 因為我們沒有指定 a 和 b 屬於哪乙個計算圖。
使用預設計算圖可以滿足要求,當我們需要使用更到計算圖時,可通過 graph函式來生成新的計算圖。對於生成的計算圖,可通過 as_default()函式將其指定為預設。以下**使用 graph()函式來生成兩個計算圖及使用 as_default()函式將生成的計算圖指定為預設:
import tensorflow as tf
#使用graph()函式建立乙個計算圖
g1 = tf.graph()
with g1.as_default(): #使用as_default()函式將定義的計算圖使用為預設
a = tf.get_variable("a", [2], initializer=tf.ones_initializer())
b = tf.get_variable("b", [2], initializer=tf.zeros_initializer())
#使用graph()函式建立另乙個計算圖
g2 = tf.graph()
with g2.as_default():
a = tf.get_variable("a", [2], initializer=tf.zeros_initializer())
b = tf.get_variable("b", [2], initializer=tf.ones_initializer())\
with tf.session(graph=g1) as sess:
tf.global_variables_initializer().run()
#初始化計算圖中的所有變數
with tf.variable_scope("", reuse=true):
print(sess.run(tf.get_variable("a")))
print(sess.run(tf.get_variable("b")))
with tf.session(graph=g2) as sess:
tf.global_variables_initializer().run()
# 初始化計算圖中的所有變數
with tf.variable_scope("", reuse=true):
print(sess.run(tf.get_variable("a")))
print(sess.run(tf.get_variable("b")))
tensorflow中的張量儲存的時運算結果的屬性,而不是真正的數字。用乙個向量相加的例子進行說明:
列印 result 張量,顯示的結果不是數字,而是加法運算結果的屬性:操作(op)、維度(shape)和資料型別(dtype)。
session就是使用者使用tensorflow時的互動介面,被實現為session類。使用run()方法來執行計算圖,使用者給run()函式傳入需要計算的節點,同時提供輸入的資料,則能計算該節點資料。
使用會話方式有兩種,一是明確呼叫會話生成函式和會話關閉函式,通過session類session()建構函式建立會話例項,然後通過close()函式關閉會話,通過這種方式必須明確使用close結束會話。
可使用 with/as使用會話。
placeholder機制用於在會話執行時動態提供輸入資料,以下**展示變數相加如何在執行時提供值:
import tensorflow as tf
#用placehoder定義乙個位置
#原型plaeshoder(dtype,shape,name)
a = tf.placeholder(tf.float32, shape=(2), name="input")
b = tf.placeholder(tf.float32, shape=(4,2), name="input")
result = a+b
with tf.session() as sess:
#run()函式原型run(self,fetches, feed_dict, options, run_metadata)
#fetches引數接受result,feed_dict引數指定了需要提供的值
res1 = sess.run(result, feed_dict=)
print(result)
print(res1)
在tensorflow中宣告乙個變數需要使用變數宣告函式——variable()。因為變數在宣告時就需要進行初始化,所以函式內部需要給出變數初始化的方法。如下所示:
a = tf.variable(tf.random_normal([3,4],stddev=1))
get_variable()函式用於請求獲取變數,其使用方法和variable()函式基本相同。
varibale_scope()函式結合上下文管理器(with)生成乙個變數空間。
name_scope()函式類似於variable_scope()函式的變數空間管理功能。
TensorFlow 程式設計概念
學習目標 構建乙個簡單的 tensorflow 程式,使用該程式繪製乙個預設圖並建立乙個執行該圖的會話 注意 請仔細閱讀本教程。tensorflow 程式設計模型很可能與您遇到的其他模型不同,因此可能不如您期望的那樣直觀。tensorflow 的名稱源自張量,張量是任意維度的陣列。tensorflo...
TensorFlow程式設計結構
tensorflow程式設計結構 tensorflow 與其他程式語言非常不同。首先通過將程式分為兩個獨立的部分,構建任何擬建立神經網路的藍圖,包括計算圖的定義及其執行。起初這對於傳統程式設計師來說看起來很麻煩,但是正是圖定義和執行的分開設計讓 tensorflow 能夠多平台工作以及並行執行,te...
TensorFlow與PyTorch程式設計方式不同
參考 pytorch 命令式程式設計 tensorflow 符號式程式設計 與命令式程式設計不同,符號式程式設計通常在計算流程完全定義好後才被執行。多個深度學習框架,如theano和tensorflow,都使用了符號式程式設計。通常,符號式程式設計的程式需要下面3個步驟 定義計算流程 把計算流程編譯...