当使用numpy.random.seed(0)获得可重现的结果时,我发现了一些奇怪的东西。
import numpy as np
def a():
print('a', np.random.rand())
b()
def b():
print('b', np.random.rand())
c()
def c():
print('c', np.random.rand())
np.random.seed(0)
a()
结果是:
a 0.5488135039273248
b 0.7151893663724195
c 0.6027633760716439
如果我将代码更改为:
import numpy as np
def a():
np.random.seed(0)
print('a', np.random.rand())
b()
print('aa', np.random.rand())
def b():
np.random.seed(0)
print('b', np.random.rand())
c()
def c():
np.random.seed(0)
print('c', np.random.rand())
a()
结果如下:
a 0.5488135039273248
b 0.5488135039273248
c 0.5488135039273248
aa 0.7151893663724195
这真的很奇怪,我使用tensorflow来训练我的财务序列预测模型,我希望得到可重复的结果。似乎我需要在每次使用随机函数之前调用np.random.seeds()。谁有更好的解决方案?
答案 0 :(得分:3)
random.seed(int)
初始化一个随机生成器,它始终具有相同的“随机”数字列表。在您的代码中,您在每个过程中初始化生成器。但是当你打印aa时,你的生成器会跳转到另一个数字。
答案 1 :(得分:1)
在每次通话之前,您正在重新初始化rng的种子。 rng的工作方式是在初始化种子后给出“随机”数字。在你的情况下,种子总是相同的,它每次只给你序列的第一个值。
p
我认为这是一个复制粘贴错误,因为你在第一个例子中说得对。无论如何你在这里有一些关于rng的信息。 Wikipedia RNG