介绍
在深度学习的实际项目中,为了减少随机性,增强项目的复现能力,设置固定随机数种子十分重要,因此这篇文章罗列了一些设置随机种子的方法和减少项目随机性的经验。
通用函数
def set_random_seed(seed):
"""Set random seeds."""
os.environ['PYTHONHASHSEED'] = str(seed)
random.seed(seed) # 设置 Python 内置随机库的种子
np.random.seed(seed) # 设置 NumPy 随机库的种子
torch.manual_seed(seed) # 设置 PyTorch 随机库的种子
torch.cuda.manual_seed(seed) # 为当前 CUDA 设备设置种子
torch.cuda.manual_seed_all(seed) # 为所有 CUDA 设备设置种子
Scikit-learn
在 Scikit-learn
中,部分算法需要设置
random_state
,比如聚类算法 kmeans
。
KMeans(n_clusters=2,random_state=42)
工程经验
- 由于部分原因,一些python数组或者python集合等,可能顺序也会影响结果的随机性。如果在无法确保顺序是固定的或者顺序是有要求的情况下,尝试对这些中间结果进行排序减少随机性。