【问题标题】:Weird results when use numpy.random.seeds(0)?使用 numpy.random.seeds(0) 时出现奇怪的结果?
【发布时间】:2018-06-27 11:24:22
【问题描述】:

我在使用 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() 。谁有更好的解决方案?

【问题讨论】:

  • 你觉得这里有什么奇怪的地方?
  • 你期待什么?
  • 为什么会很奇怪?这正是伪随机生成器的工作原理。

标签: python numpy random tensorflow


【解决方案1】:
random.seed(int)

初始化一个随机生成器,它始终具有相同的“随机”数字列表。在您的代码中,您在每个过程中初始化生成器。但是当你打印 aa 时,你的生成器会跳转到另一个数字。

【讨论】:

  • 谢谢。显然我对随机种子有误解。
【解决方案2】:

您在每次调用之前重新初始化 rng 的种子。 rng 的工作方式是在初始化种子之后给出“随机”数字。在您的情况下,由于种子始终相同,它每次都会为您提供序列的第一个值。

def b():
     np.random.seed(0)
     print('b', np.random.rand())
     c()

我认为这是一个复制粘贴错误,因为您在第一个示例中是正确的。无论如何,在这里你有一些关于 rng 的信息。 Wikipedia RNG

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多