1. 程式人生 > >tf.Variables 簡介:建立,初始化

tf.Variables 簡介:建立,初始化

簡介

        定義變數是必要的,因為它們包含引數。沒有引數,就不能執行訓練、更新、儲存、恢復和其他節點。
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)