基于HiLens Studio開發行人檢測與跟蹤應用
864
2025-04-04
Tensorflow |(1)初識Tensorflow
Tensorflow |(2)張量的階和數據類型及張量操作
Tensorflow |(3)變量的的創建、初始化、保存和加載
變量的的創建、初始化、保存和加載
其實變量的作用在語言中相當,都有存儲一些臨時值的作用或者長久存儲。在Tensorflow中當訓練模型時,用變量來存儲和更新參數。變量包含張量(Tensor)存放于內存的緩存區。建模時它們需要被明確地初始化,模型訓練后它們必須被存儲到磁盤。值可在之后模型訓練和分析是被加載。
Variable類
tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)
創建一個帶值的新變量initial_value
initial_value:A Tensor或Python對象可轉換為a Tensor.變量的初始值.必須具有指定的形狀,除非 validate_shape設置為False.
trainable:如果True,默認值也將該變量添加到圖形集合GraphKeys.TRAINABLE_VARIABLES,該集合用作Optimizer類要使用的變量的默認列表
collections:圖表集合鍵列表,新變量添加到這些集合中.默認為[GraphKeys.VARIABLES]
validate_shape:如果False允許使用未知形狀的值初始化變量,如果True,默認形狀initial_value必須提供.
name:變量的可選名稱,默認'Variable'并自動獲取
變量的創建
創建當一個變量時,將你一個張量作為初始值傳入構造函數Variable().TensorFlow提供了一系列操作符來初始化張量,值初始的英文常量或是隨機值。像任何一樣Tensor,創建的變量Variable()可以用作圖中其他操作的輸入。此外,為Tensor該類重載的所有運算符都被轉載到變量中,因此您也可以通過對變量進行算術來將節點添加到圖形中。
x = tf.Variable(5.0,name="x")
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
調用tf.Variable()向圖中添加了幾個操作:
一個variable op保存變量值。
初始化器op將變量設置為其初始值。這實際上是一個tf.assign操作。
初始值的ops,例如 示例中biases變量的zeros op 也被添加到圖中。
變量的初始化
變量的初始化必須在模型的其它操作運行之前先明確地完成。最簡單的方法就是添加一個給所有變量初始化的操作,并在使用模型之前首先運行那個操作。最常見的初始化模式是使用便利函數 initialize_all_variables()將Op添加到初始化所有變量的圖形中。
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
還可以通過運行其初始化函數op來初始化變量,從保存文件還原變量,或者簡單地運行assign向變量分配值的Op。實際上,變量初始化器op只是一個assignOp,它將變量的初始值賦給變量本身。assign是一個方法,后面方法的時候會提到
with tf.Session() as sess:
sess.run(w.initializer)
通過另一個變量賦值
你有時候會需要用另一個變量的初始化值給當前變量初始化,由于tf.global_variables_initializer()初始化所有變量,所以需要注意這個方法的使用。
就是將已初始化的變量的值賦值給另一個新變量!
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
w2 = tf.Variable(weights.initialized_value(), name="w2")
w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")
所有變量都會自動收集到創建它們的圖形中。默認情況下,構造函數將新變量添加到圖形集合GraphKeys.GLOBAL_VARIABLES。方便函數 global_variables()返回該集合的內容。
屬性
name
返回變量的名字
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
print(weights.name)
op
返回op操作
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
print(weights.op)
方法
assign
為變量分配一個新值。
x = tf.Variable(5.0,name="x")
w.assign(w + 1.0)
eval
在會話中,計算并返回此變量的值。這不是一個圖形構造方法,它不會向圖形添加操作。方便打印結果
v = tf.Variable([1, 2])
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
# 指定會話
print(v.eval(sess))
# 使用默認會話
print(v.eval())
變量的靜態形狀與動態形狀
TensorFlow中,張量具有靜態(推測)形狀和動態(真實)形狀
靜態形狀:
創建一個張量或者由操作推導出一個張量時,初始狀態的形狀
tf.Tensor.get_shape:獲取靜態形狀
tf.Tensor.set_shape():更新Tensor對象的靜態形狀,通常用于在不能直接推斷的情況下
動態形狀:
一種描述原始張量在執行過程中的一種形狀
tf.shape(tf.Tensor):如果在運行的時候想知道None到底是多少,只能通過tf.shape(tensor)[0]這種方式來獲得
tf.reshape:創建一個具有不同動態形狀的新張量
要點
1、轉換靜態形狀的時候,1-D到1-D,2-D到2-D,不能跨階數改變形狀
2、 對于已經固定或者設置靜態形狀的張量/變量,不能再次設置靜態形狀
3、tf.reshape()動態創建新張量時,元素個數不能不匹配
4、運行時候,動態獲取張量的形狀值,只能通過tf.shape(tensor)[]
管理圖中收集的變量
tf.global_variables()
返回圖中收集的所有變量
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
print(tf.global_variables())
TensorFlow
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。