【发布时间】:2019-12-04 20:15:08
【问题描述】:
我想看看我的神经网络中哪个随机数生成器包更快。
我目前正在从 github 更改代码,其中 numpy.random 和 random 包都用于生成随机整数、随机选择、随机样本等。
我更改此代码的原因是出于研究目的,我想设置一个全局种子,以便能够比较不同超参数设置的准确性性能。问题是,此时我必须为 random 包和 numpy 包设置 2 个全局种子。理想情况下,我只想设置一个种子,因为来自两个随机数生成器序列的绘图可能会更快地相互关联。
但是,我不知道哪个包的性能更好(就速度而言):numpy 或 random。所以我想为这两个包找到与完全相同的 Mersenne Twister 序列相对应的种子。这样,两个模型的图纸是相同的,因此每个梯度下降步骤中的迭代次数也相同,导致速度差异仅由我使用的包引起。
我找不到任何关于种子对的任何文档,这些种子对最终以相同的随机数序列用于两个包,而且尝试各种组合似乎有点麻烦。
我尝试了以下方法:
np.random.seed(1)
numpy_1=np.random.randint(0,101)
numpy_2=np.random.randint(0,101)
numpy_3=np.random.randint(0,101)
numpy_4=np.random.randint(0,101)
for i in range(20000000):
random.seed(i)
random_1=random.randint(0,101)
if random_1==numpy_1:
random_2=random.randint(0,101)
if random_2==numpy_2:
random_3=random.randint(0,101)
if random_3==numpy_3:
random_4=random.randint(0,101)
if random_4==numpy_4:
break
print(np.random.randint(0,101))
print(random.randint(0,101))
但正如预期的那样,这并没有真正奏效。
【问题讨论】:
-
np.sin在处理一个值时比math.sin慢,但在处理大型数组时更快。这可能同样适用于random。np.random对于一个值可能会更慢,但如果要求提供数千个值则更快。
标签: python performance numpy random random-seed