在所有模块中为火炬、随机数和 numpy 设置相同的种子
Setting the same seed for torch, random number and numpy throughout all the modules
我试图在整个项目中设置相同的种子。
以下是我在主文件中设置的参数,其中将导入所有其他模块 -
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) 如果我只是从上面的语句中删除 random_state
参数,它会从我的主文件中获取种子吗?
如果没有,那怎么设置呢?
2)是否所有其他需要种子的函数如torch.manual.seed
、torch.cuda.manual_seed(seed)
会以同样的方式表现?(如果不是,那么如何解决它)
1)If I just remove the random_state parameter from the above statement
so will it take the seed from my main file?
是的,因为默认 (None
) 值的 docs 表示:
Use the global random state instance from numpy.random. Calling the
function multiple times will reuse the same instance, and will produce
different results.
当你在 __init__
中使用它时,我想,它将 运行 在你从你的包中使用的任何其他功能之前,你没问题。
2)Does all the other function which requires seed
like torch.manual.seed, torch.cuda.manual_seed(seed) will behave in
the same way?
是的,这些将为 Python 和 PyTorch 设置全局种子,你在这里也很好。
我试图在整个项目中设置相同的种子。 以下是我在主文件中设置的参数,其中将导入所有其他模块 -
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) 如果我只是从上面的语句中删除 random_state
参数,它会从我的主文件中获取种子吗?
如果没有,那怎么设置呢?
2)是否所有其他需要种子的函数如torch.manual.seed
、torch.cuda.manual_seed(seed)
会以同样的方式表现?(如果不是,那么如何解决它)
1)If I just remove the random_state parameter from the above statement so will it take the seed from my main file?
是的,因为默认 (None
) 值的 docs 表示:
Use the global random state instance from numpy.random. Calling the function multiple times will reuse the same instance, and will produce different results.
当你在 __init__
中使用它时,我想,它将 运行 在你从你的包中使用的任何其他功能之前,你没问题。
2)Does all the other function which requires seed like torch.manual.seed, torch.cuda.manual_seed(seed) will behave in the same way?
是的,这些将为 Python 和 PyTorch 设置全局种子,你在这里也很好。