有代码如下:
import random
parser.add_argument('--seed', type=int, default=1)
args = parser.parse_args()
torch.manual_seed(args.seed)
if torch.cuda.is_available():
torch.cuda.manual_seed(args.seed)
random.seed(args.seed)
但是出现的问题是:
File "/home/zrp/.pycharm_helpers/pydev/pydevd.py", line 1496, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/zrp/.pycharm_helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home/zrp/NestedGNN-master-2/run_tu.py", line 195, in <module>
random.seed(args.seed)
AttributeError: 'function' object has no attribute 'seed'
这个错误是因为你的代码中存在一个命名冲突。Python标准库中有一个名为random
的模块,你使用了import random
,然后又试图使用random.seed(args.seed)
来设置随机种子。但是在你的代码中,random
不再是指向标准库中的random
模块,而是指向你之前导入的random
模块的seed
函数。
为了解决这个问题,你可以采取以下两种方法之一:
这个错误是因为你的代码中存在一个命名冲突。Python标准库中有一个名为random
的模块,你使用了import random
,然后又试图使用random.seed(args.seed)
来设置随机种子。但是在你的代码中,random
不再是指向标准库中的random
模块,而是指向你之前导入的random
模块的seed
函数。
为了解决这个问题,你可以采取以下两种方法之一:
- 重命名你的随机模块导入:将导入语句中的
random
重命名为另一个名字,例如my_random
,以避免命名冲突。这样,你就可以像下面这样设置随机种子:import random as my_random # 重命名导入的random模块 # 然后使用my_random设置随机种子 my_random.seed(args.seed)
2. 不使用random
模块,直接使用random
函数:你可以不导入random
模块,而是使用Python的内置random
函数来设置随机种子。这样就不会有命名冲突了。示例如下:
# 不导入random模块,直接使用Python内置的random函数
import argparse
import torch
parser = argparse.ArgumentParser()
parser.add_argument('--seed', type=int, default=1)
args = parser.parse_args()
torch.manual_seed(args.seed)
if torch.cuda.is_available():
torch.cuda.manual_seed(args.seed)
import random # 如果需要在其他地方使用random模块,可以在这里导入
random.seed(args.seed)
选择哪种方法取决于你的偏好和代码的结构。如果你打算在代码的其他地方使用random
模块的其他功能,第一种方法可能更合适。如果只是设置随机种子,第二种方法更简单