在所有模块中为 torch、随机数和 numpy 设置相同的种子

我试图在整个项目中设置相同的种子。以下是我在主文件中设置的参数,其中将导入所有其他模块 -


seed = 42

os.environ['PYTHONHASHSEED'] = str(seed)

# Torch RNG

torch.manual_seed(seed)

torch.cuda.manual_seed(seed)

torch.cuda.manual_seed_all(seed)

# Python RNG

np.random.seed(seed)

random.seed(seed)

我的项目目录如下所示 -


├── Combined_Files_without_label5.csv

├── __pycache__

│   ├── dataset.cpython-37.pyc

│   ├── datasets.cpython-37.pyc

│   └── testing.cpython-37.pyc

├── datasets.py

├── import_packages

│   ├── __init__.py

│   ├── __pycache__

│   │   ├── __init__.cpython-37.pyc

│   │   ├── dataset.cpython-37.pyc

│   │   ├── dataset_class.cpython-37.pyc

│   │   ├── dataset_partition.cpython-37.pyc

│   │   └── visualising.cpython-37.pyc

│   ├── dataset_class.py

│   ├── dataset_partition.py

│   └── visualising.py

├── main.py

现在的问题是我正在从中导入模块,dataset_partition.py并且该函数需要seed那里的值。例如-


    df_train, df_temp, y_train, y_temp = train_test_split(X,

                                                      y,

                                                      stratify=y,

                                                      test_size=(1.0 - frac_train), # noqa

                                                      random_state=seed) 

现在,我的问题是, 1)如果我只是从上述语句中

删除参数,那么它会从我的主文件中获取种子吗?如果没有,那么如何设置呢? 2)所有其他需要种子的函数(例如 , )是否都会以相同的方式运行?(如果不是,那么如何解决它)random_state


torch.manual.seedtorch.cuda.manual_seed(seed)


慕婉清6462132
浏览 118回答 1
1回答

慕码人2483693

1)如果我只是从上面的语句中删除 random_state 参数,那么它会从我的主文件中获取种子吗?是的,正如默认 ( ) 值的文档None所述:使用 numpy.random 中的全局随机状态实例。多次调用该函数将重用同一个实例,并会产生不同的结果。我想当您使用它时__init__,它将在您使用包中的任何其他功能之前运行,并且没问题。2)所有其他需要种子的函数(如 torch.manual.seed、torch.cuda.manual_seed(seed))是否会以相同的方式运行?是的,这些将为 Python 和 PyTorch 设置全局种子以供使用,您在这里也可以。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python