TensorFlow建立變數

2021-08-10 10:33:08 字數 3913 閱讀 2685

一、使用tf.variable函式建立變數

tf.variable(initial_value=none,trainable=true,collections=none,validate_shape=true,caching_device=none,name=none,variable_def=none,dtype=none,expected_shape=none,import_scope=none)

函式功能:建立乙個新的變數,變數的值是initial_value,建立的變數會被新增到[graphkeys.global_variables]預設的計算圖列表中,如果trainable被設定為true,這個變數還會被新增到graphkeys.trainable_variables計算圖的集合中。

引數:initial_value:預設值是none,張量或者是乙個python物件可以轉成張量,這個initial_value是初始化變數的值。它必須有乙個特殊的shape,除非validate_shape設定為false。

trainable:預設的是true,變數還會被新增到graphkeys.trainable_variables計算圖集合中。

collections:變數會被新增到這個集合中,預設的集合是[graphkeys.global_variables]。

validate_shape:如果是false,允許這個變數被初始化乙個不知道shape。預設的是true,這個initial_value的shape必須是知道的。

name:變數的名字。

dypte:變數的型別,小數的預設是float32,整數預設是int32。

a = tf.variable(initial_value=[1,2,3],name="a")

init = tf.initialize_all_variables()

sess = tf.session()

sess.run(init)

print(a.eval(session=sess))

#[1 2 3]

print(a.dtype)

#

二、使用tf.get_variable函式建立變數

tf.get_variable(name,shape=none,dtype=none,initializer=none,regularizer=none,trainable=true,collections=none,

caching_device=none,partitioner=none,validate_shape=true,use_resource=none,custom_getter=none)

函式功能:根據變數的名稱來獲取變數或者建立變數。

引數:name:變數的名稱(必選)。

shape:變數的shape。

dtype:變數的資料型別。

initializer:變數的初始化值。

1、根據變數的名稱建立變數

b = tf.get_variable(name="b", initializer=[1., 2., 3.])

init = tf.initialize_all_variables()

sess = tf.session()

sess.run(init)

print(b.eval(session=sess))

#[ 1. 2. 3.]

print(b.dtype)

#

使用tf.get_variable建立變數的時候,如果不指定name,會報typeerror: get_variable() missing 1 required positional argument: 'name'

2、根據變數的名稱獲取變數

with tf.variable_scope("f"):

#初始化乙個變數名稱為c的變數

c = tf.get_variable(name="c",shape=[3],initializer=tf.constant_initializer([1,2,3]))

with tf.variable_scope("f",reuse=true):

d = tf.get_variable(name="c",shape=[3])

sess = tf.session()

init = tf.initialize_all_variables()

sess.run(init)

print(d.eval(session=sess))

#[ 1. 2. 3.]

print(c.eval(session=sess))

#[ 1. 2. 3.]

print(d == c)

#true

在使用tf.get_variable()根據變數的名稱來獲取已經生成變數的時候,需要通過tf.variable_scope函式來生成乙個上下文管理器,並明確指定在這個上下文管理器中。獲取變數值的時候,需要將上下文管理器中的reuse設定為true,才能直接獲取已經宣告的變數,如果不設定reuse會報錯。需要注意的是,如果變數名在上下文管理器中已經存在,在獲取的時候,如果不將reuse設定為true則會報錯。同理,如果上下文管理器中不存在變數名,在使用reuse=true獲取變數值的時候,也會報錯。

三、tf.variable_scope的巢狀

with tf.variable_scope("a"):#預設是false

#檢視上下文管理器中的reuse的值

print(tf.get_variable_scope().reuse) #false

with tf.variable_scope("b",reuse=true):

print(tf.get_variable_scope().reuse) #true

#如果reuse是預設的則保持和上一層的reuse值一樣

with tf.variable_scope("c"):

print(tf.get_variable_scope().reuse) #true

print(tf.get_variable_scope().reuse) #false

四、上下文管理器與變數名

#沒有上下文管理器

a = tf.get_variable(name="a",shape=[2],initializer=tf.constant_initializer([1,2]))

print(a.name) #a:0,a就是變數名

#宣告上下文管理器

with tf.variable_scope("f"):

b = tf.get_variable(name="b",shape=[2],initializer=tf.constant_initializer([1,2]))

print(b.name) #f/b:0,f代表的是上下文管理器的名稱,b代表的是變數的名稱

#巢狀上下文管理器

with tf.variable_scope("g"):

c = tf.get_variable(name="c",shape=[2],initializer=tf.constant_initializer([1,2]))

print(c.name)#f/g/c:0

通過上下文管理器和變數名來獲取變數

#通過帶上下文管理器名稱和變數名來獲取變數

with tf.variable_scope("",reuse=true):

d = tf.get_variable(name="f/b")

print(d == b) #true

e = tf.get_variable(name="f/g/c")

print(e == c) #true

tensorflow變數建立與初始化

import tensorflow as tf v tf.get variable v shape 1 initializer tf.constant initializer 1.0 或者 v tf.variable tf.constant 1.0,shape 1 name v 上述兩種變數建立的區...

使用TensorFlow建立第變數定義和執行方式

import tensorflow as tf 熟悉tensorflow的變數定義和執行方式 v1 tf.variable 2 定義變數並給變數賦值 v2 tf.variable 48 c1 tf.constant 16 定義常量並賦值 c2 tf.constant 3 addv v1 v2 ses...

tensorflow 共享變數

import tensorflow as tf 設定隨機種子,使得每次隨機初始化都一樣 tf.set random seed 1234 這是我們要共享的變數函式 def share variable input weight tf.get variable weight 2,2 return wei...