我试图理解局部和全局变量在张量流中是如何不同的,以及初始化变量的正确方法。
根据文件tf.local_variables_initializer
:
返回初始化所有局部变量的Op。
这只是variables_initializer(local_variables())
的快捷方式
所以关键部分是tf.local_variables
。 The doc:
局部变量 - 每个过程变量,通常不保存/恢复到检查点并用于临时值或中间值。例如,它们可以用作度量计算的计数器或本机读取数据的时期数。
这听起来合乎逻辑,但无论我如何尝试,我都无法将任何变量置于本地。
features = 2
hidden = 3
with tf.variable_scope('start'):
x = tf.placeholder(tf.float32, shape=[None, features], name='x')
y = tf.placeholder(tf.float32, shape=[None], name='y')
with tf.variable_scope('linear'):
W = tf.get_variable(name='W', shape=[features, hidden])
b = tf.get_variable(name='b', shape=[hidden], initializer=tf.zeros_initializer)
z = tf.matmul(x, W) + b
with tf.variable_scope('optimizer'):
predict = tf.reduce_sum(z, axis=1)
loss = tf.reduce_mean(tf.square(y - predict))
optimizer = tf.train.AdamOptimizer(0.1).minimize(loss)
print(tf.local_variables())
输出始终为空列表。 如何和 我应该创建局部变量?
答案 0 :(得分:1)
局部变量只是一个常规变量,它被添加到"特殊变量"集合。
该集合为tf.GraphKeys.LOCAL_VARIABLES
。
您可以选择任何变量定义,只需添加参数collections=[tf.GraphKeys.LOCAL_VARIABLES]
即可将变量添加到指定的集合列表中。
答案 1 :(得分:1)
想想我找到了。在collections=[tf.GraphKeys.LOCAL_VARIABLES]
tf.get_variable
W
{} {} {{}}} {所以这种方式W = tf.get_variable(name='W', shape=[features, hidden], collections=[tf.GraphKeys.LOCAL_VARIABLES])
变成局部变量:
q = tf.contrib.framework.local_variable(0.0, name='q')
文档提到了另一种可行的可能性:
(?=.*\|)