import tensorflow as tf
import numpy as np
x_tf = tf.placeholder('float',[None, 2, 5, 1])
x_np = np.random.noraml(0,1,[1,2,5,1])
# ======== filter option1 and option2 ===========
f_np = np.random.normal(0,1,[1,3,1,1])
f_tf = tf.constant(f_np,'float') # option 1
f_tf = tf.random_normal([1,3,1,1]) # option 2
# ===============================================
x_conv = tf.nn.conv2d(x_tf,f_tf,[1,1,1,1],'SAME')
with tf.Session() as sess:
tf.global_variables_initializer().run()
x_conv_np = sess.run(x_conv, feed_dict={x_tf: x_np})
x_conv_np2 = sess.run(x_conv, feed_dict={x_tf: x_np})
如果我运行上面选项1的代码中,我得到了相同的值x_conv_np
与x_conv_np2
然而,当我运行上面选项2,我得到不同的值x_conv_np
和x_conv_np2
。
我猜测每次运行会话时都会初始化tf.random_normal。这是要发生吗?即使我这样做也会发生这种情况。tf.set_random_seed
有人可以解释运行会话时TensorFlow如何初始化其随机变量吗?
TensorFlow中的所有随机数ops(包括tf.random_normal()
)每次运行时都会采样一个新的随机张量:
TensorFlow有几个操作可以创建具有不同分布的随机张量。随机操作是有状态的,并且每次对其进行评估时都会创建新的随机值。
如果要对分布进行一次采样,然后重新使用结果,则应使用atf.Variable
并通过运行tf.random_normal()
一次将其初始化。例如,以下代码将两次打印相同的随机值:
f_tf = tf.Variable(tf.random_normal([1, 3, 1, 1]))
# ...
init_op = tf.global_variables_initializer()
# ...
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(f_tf))
print(sess.run(f_tf))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句