使用tf.random多次运行会话会为conv2d返回不同的值

使用tf.random多次运行会话会为conv2d返回不同的值,random,tensorflow,convolution,Random,Tensorflow,Convolution,如果我用选项1运行上面的代码,我会得到与x\u conv\u np和x\u conv\u np2 但是,当我使用选项2运行上述命令时,我会得到不同的x\u conv\u np和x\u conv\u np2值 我猜tf.random_normal在每次运行会话时都会初始化。 这是注定要发生的吗? 即使我执行tf.set\u random\u seed 有人能解释一下会话运行时TensorFlow是如何初始化其随机变量的吗? 所有in-TensorFlow(包括)在每次运行时都会采样一个新的随机张量

如果我用选项1运行上面的代码,我会得到与
x\u conv\u np
x\u conv\u np2
但是,当我使用选项2运行上述命令时,我会得到不同的
x\u conv\u np
x\u conv\u np2

我猜tf.random_normal在每次运行会话时都会初始化。 这是注定要发生的吗? 即使我执行
tf.set\u random\u seed
有人能解释一下会话运行时TensorFlow是如何初始化其随机变量的吗?

所有in-TensorFlow(包括)在每次运行时都会采样一个新的随机张量:

TensorFlow有几个操作可以创建具有不同分布的随机张量。随机操作是有状态的,每次计算时都会创建新的随机值

如果要对分布进行一次采样,然后重新使用结果,则应使用
tf.Variable
并通过运行
tf.random\u normal()
一次对其进行初始化。例如,以下代码将打印相同的随机值两次:

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})

难道你的代码没有输入错误吗。您的提要应该是
{x\u tf:x\u np}
谢谢!修正了错误,谢谢!我完全忘记了我必须将权重初始化为tf.Variable(…)
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))