基于HiLens Studio開發行人檢測與跟蹤應用
754
2025-03-31
Tensorflow |(1)初識Tensorflow
Tensorflow |(2)張量的階和數據類型及張量操作
Tensorflow |(3)變量的的創建、初始化、保存和加載
Tensorflow |(4)名稱域、圖 和會話
變量作用域
tensorflow提供了變量作用域和共享變量這樣的概念,有幾個重要的作用。
讓模型代碼更加清晰,作用分明
變量作用域域
通過tf.variable_scope()創建指定名字的變量作用域
with tf.variable_scope("itcast") as scope:
print("----")
加上with語句就可以在整個itcast變量作用域下就行操作。
嵌套使用
變量作用域可以嵌套使用
with tf.variable_scope("itcast") as itcast:
with tf.variable_scope("python") as python:
print("----")
變量作用域下的變量
在同一個變量作用域下,如果定義了兩個相同名稱的變量(這里先用tf.Variable())會怎么樣呢?
with tf.variable_scope("itcast") as scope:
a = tf.Variable([1.0,2.0],name="a")
b = tf.Variable([2.0,3.0],name="a")
我們通過tensoflow提供的計算圖界面觀察
我們發現取了同樣的名字,其實tensorflow并沒有當作同一個,而是另外又增加了一個a_1,來表示b的圖
變量范圍
當每次在一個變量作用域中創建變量的時候,會在變量的name前面加上變量作用域的名稱
with tf.variable_scope("itcast"):
a = tf.Variable(1.0,name="a")
b = tf.get_variable("b", [1])
print(a.name,b.name)
得道結果
(u'itcast/a:0', u'itcast/b:0')
對于嵌套的變量作用域來說
with tf.variable_scope("itcast"):
with tf.variable_scope("python"):
python3 = tf.get_variable("python3", [1])
assert python3.name == "itcast/python/python3:0"
var2 = tf.get_variable("var",[3,4],initializer=tf.constant_initializer(0.0))
圖與會話
圖
tf.Graph
TensorFlow計算,表示為數據流圖。一個圖包含一組表示 tf.Operation計算單位的對象和tf.Tensor表示操作之間流動的數據單元的對象。默認Graph值始終注冊,并可通過調用訪問 tf.get_default_graph。
a = tf.constant(1.0)
assert c.graph is tf.get_default_graph()
我們可以發現這兩個圖是一樣的。那么如何創建一個圖呢,通過tf.Graph()
g1= tf.Graph()
g2= tf.Graph()
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(g1,g2,tf.get_default_graph())
圖的其它屬性和方法
作為一個圖的類,自然會有一些圖的屬性和方法。
as_default()
返回一個上下文管理器,使其成為Graph默認圖形。
如果要在同一過程中創建多個圖形,則應使用此方法。為了方便起見,提供了一個全局默認圖形,如果不明確地創建一個新的圖形,所有操作都將添加到此圖形中。使用該with關鍵字的方法來指定在塊的范圍內創建的操作應添加到此圖形中。
g = tf.Graph()
with g.as_default():
a = tf.constant(1.0)
assert c.graph is g
會話
tf.Session
運行TensorFlow操作圖的類,一個包含ops執行和tensor被評估
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
sess = tf.Session()
print(sess.run(c))
在開啟會話的時候指定圖
with tf.Session(graph=g) as sess:
資源釋放
會話可能擁有很多資源,如 tf.Variable,tf.QueueBase和tf.ReaderBase。在不再需要這些資源時,重要的是釋放這些資源。要做到這一點,既可以調用tf.Session.close會話中的方法,也可以使用會話作為上下文管理器。以下兩個例子是等效的:
# 使用close手動關閉
sess = tf.Session()
sess.run(...)
sess.close()
# 使用上下文管理器
with tf.Session() as sess:
sess.run(...)
run方法介紹
run(fetches, feed_dict=None, options=None, run_metadata=None)
運行ops和計算tensor
fetches 可以是單個圖形元素,或任意嵌套列表,元組,namedtuple,dict或OrderedDict
feed_dict 允許調用者覆蓋圖中指定張量的值
如果a,b是其它的類型,比如tensor,同樣可以覆蓋原先的值
a = tf.placeholder(tf.float32, shape=[])
b = tf.placeholder(tf.float32, shape=[])
c = tf.constant([1,2,3])
with tf.Session() as sess:
a,b,c = sess.run([a,b,c],feed_dict={a: 1, b: 2,c:[4,5,6]})
print(a,b,c)
錯誤
RuntimeError:如果它Session處于無效狀態(例如已關閉)。
TypeError:如果fetches或feed_dict鍵是不合適的類型。
ValueError:如果fetches或feed_dict鍵無效或引用 Tensor不存在。
其它屬性和方法
graph
返回本次會話中的圖
as_default()
返回使此對象成為默認會話的上下文管理器。
獲取當前的默認會話,請使用 tf.get_default_session
c = tf.constant(..)
sess = tf.Session()
with sess.as_default():
assert tf.get_default_session() is sess
print(c.eval())
注意:?使用這個上下文管理器并不會在退出的時候關閉會話,還需要手動的去關閉
c = tf.constant(...)
sess = tf.Session()
with sess.as_default():
print(c.eval())
# ...
with sess.as_default():
print(c.eval())
sess.close()
TensorFlow
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。