在TensorFlow中,我可以通过两种方式初始化变量:
global_variable_intializer()
在声明变量之前调用:
import tensorflow as tf
# Initialize the global variable and session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
W = tf.Variable([.3], tf.float32)
x = tf.Variable([-.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
linear_model = W * x + b
global_variable_intializer()
声明变量后调用:
import tensorflow as tf
W = tf.Variable([.3], tf.float32)
x = tf.Variable([-.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
linear_model = W * x + b
# Initialize the global variable and session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
两者有什么区别?哪种是初始化变量的最佳方法?
编辑
这是我正在运行的实际程序:
import tensorflow as tf
# Initialize the global variable and session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
linear_model = W * x + b
square_delta = tf.square(linear_model - y)
loss = tf.reduce_sum(square_delta)
fixW = tf.assign(W, [-1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))
在情况1中,变量未初始化,如果尝试
sess.run(linear_model)
它应该给你某种错误(我的编译器上的FailedPreconditionError)。
情况2是可行的。
命令
tf.global_variables_initializer()
创建所有变量后应调用,否则将引发相同的错误。
据我了解,每次调用tf.Variable时,与变量相关的节点都会添加到图中。这些是以下内容:
Variable/initial_value
Variable
Variable/Assign
Variable/read
(您可以使用以下命令获得到目前为止已构建的节点
for n in tf.get_default_graph().as_graph_def().node:
print n.name
)
变量本身没有任何值,直到您在会话中的“变量/分配”节点中运行。
命令
init = tf.global_variables_initializer()
创建一个包含到目前为止构造的所有变量的所有分配节点的单个节点,并将其与python变量'init'关联,以便在执行该行时
sess.run(init)
所有变量都获取初始值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句