我有两个tensorflow程序,如何为权重和偏差保持相同的初始值?

时间:2017-09-25 06:51:10

标签: python tensorflow

我在python中有两个tensorflow程序,差别很小,但两个程序的权重和偏差总数相同。

为了进行比较,我想启动两个具有相同初始状态的程序。

计划1

import tensorflow as tf

def getVariable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

W = getVariable([10, 10])
b = getVariable([10,10])
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
r = W * b
print(sess.run(r))

计划2

import tensorflow as tf

def getVariable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

W1 = getVariable([10, 10])
b1 = getVariable([10,10])
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
r1 = W1 * b1
print(sess.run(r1))

2 个答案:

答案 0 :(得分:1)

Tensorflow有2个不同的PRNG,每个PRNG需要一个用于生成随机值的种子。

第一个PRNG是图表的一个,第二个是操作一级。

如果您没有明确设置这些种子,tensorflow将使用随机值,因此您将始终生成不同的值。

要设置图表种子,您必须使用tf.sed_random_seed

tf.set_random_seed(1)

要设置操作级别,您必须将种子传递给生成随机值的每个操作,在您的情况下:

tf.truncated_normal(shape, stddev=0.1, seed=1)

答案 1 :(得分:0)

您可以像这样使用set_random_seed

tf.set_random_seed(42)

def getVariable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

W = getVariable([10, 10])
#...

然而,如果你这样做,你仍会在执行之间得到不同的值。要在两个程序中获得相同的数字,您仍需要使用tf.reset_default_graph()将图表重置为默认值 在代码的开头。