Jupyter 内核重启之间的随机性
Randomness between Jupyter Kernel Restarts
问题:
我目前正在处理数据集群,并在我的 Jupyter Notebooks 中发现了一个奇怪的行为。所有种子都是固定的。多次执行部分或全部代码会产生稳定的结果。重新启动内核会导致结果发生变化。无论如何,只要内核处于活动状态,这些新结果就是稳定的。
import numpy as np
import random, os
# Fix Seeds
def fix_seeds(seed=1234):
random.seed(seed)
np.random.seed(seed)
# In case the modules do something on import
fix_seeds()
# Other imports (Only depending on random and/or numpy)
所以我的问题是:
随机性是如何或在什么时候引入的,以及如何解决它?
显然 Python >= 3.3 使用随机 Hash-Seed 来避免碰撞攻击。修复该种子(例如执行 PYTHONHASHSEED=0 python3 <file>.py
)解决了我的问题。内核也是如此。在启动时,它们也会生成 Hash-Seed。
来源:
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED
问题: 我目前正在处理数据集群,并在我的 Jupyter Notebooks 中发现了一个奇怪的行为。所有种子都是固定的。多次执行部分或全部代码会产生稳定的结果。重新启动内核会导致结果发生变化。无论如何,只要内核处于活动状态,这些新结果就是稳定的。
import numpy as np
import random, os
# Fix Seeds
def fix_seeds(seed=1234):
random.seed(seed)
np.random.seed(seed)
# In case the modules do something on import
fix_seeds()
# Other imports (Only depending on random and/or numpy)
所以我的问题是: 随机性是如何或在什么时候引入的,以及如何解决它?
显然 Python >= 3.3 使用随机 Hash-Seed 来避免碰撞攻击。修复该种子(例如执行 PYTHONHASHSEED=0 python3 <file>.py
)解决了我的问题。内核也是如此。在启动时,它们也会生成 Hash-Seed。
来源: https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED