tf.Variables 簡介:建立,初始化
阿新 • • 發佈:2018-11-25
簡介
定義變數是必要的,因為它們包含引數。沒有引數,就不能執行訓練、更新、儲存、恢復和其他節點。
tensorflow 中定義的變數只是具有特定形狀和型別的張量。張量必須初始化值才能有效。
建立 Variables
建立張量變數,使用tf.Variables() 類。當我們定義一個變數時,我們基本上把一個張量及其值傳遞給 graph 圖。一般地,一個變數張量會轉遞給 graph 圖,通過 tf.assign 初始化設定該變數值。
import tensorflow as tf from tensorflow.python.framework import ops # 定義變數 # 1.建立隨機正態分佈產生2行3列矩陣變數 weight = tf.Variable(tf.random_normal([2, 3], stddev=0.1),name='weight') # 2.建立全是 0 的陣列 bias = tf.Variable(tf.zeros(3), name='bias') custom = tf.Variable(tf.zeros(3), name='custom') # 得到所有變數的張量並將它們儲存在一個列表中 all_var_list = ops.get_collection(ops.GraphKeys.GLOBAL_VARIABLES)
在上面的程式碼中,ops.get_collection從已定義的 graph 圖中獲取所有已定義變數的列表。變數裡的 “name”鍵,為圖中的每個變數定義一個特定的名稱。
初始化
變數可以部分初始化,全域性地初始化,或者從其他變數初始化
########################## 區域性初始化 ################################## # 可以這樣定義: var_list_custom = [weight, custom] init_custom_op = tf.variables_initializer(var_list = var_list_custom) ######################### 全域性初始化 ################################### # 自定義全部初始化 # 第一種方式 init_all_op = tf.global_variables_initializer() # 另一種方式, all_var_list 是在上面的儲存列表 ops_get_collection() init_all_op = tf.variables_initializer(var_list=all_var_list) ######################### 已有變數初始化 ################################ # 建立另一個變數 (weight 第一張圖剛建立的變數)值相同的變數 WeightsNew = tf.Variable(weights.initialized_value(), name="WeightsNew") # 初始化這個變數 init_WeightsNew_op = tf.variables_initializer(var_list=[WeightsNew])
執行會話
目前所做的只是定義初始化器的操作並將它們放到圖中。為了真正地初始化變數,必須在會話中執行已定義的初始化器的ops
with tf.Session() as sess:
# 執行初始化op
sess.run(init_all_op)
sess.run(init_custom_op)
sess.run(init_WeightsNew_op)