浅记一下做实验以来发现的对算法复现性有影响的一些因素,后序继续补充,争取少走弯路!
随机种子任何一个环节随机种子不固定,都可能导致同样的代码和参数无法跑出相同的结果,所以实验必加以下代码,并固定seed:
def set_seed(seed):
os.environ['PYTHONHASHSEED'] =str(seed)
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
pytorch版本
之前因为服务器的问题在实验过程中根据cuda修改了pytorch的安装版本,导致代码跑出了完全不同的新结果(懊恼了很久!)大概就是cuda10.1对应的torch切到cuda11.1对应的torch就导致了实验结果的不同,后来通过重新装回原来版本的torch复现出了之前的结果。
所以,实验要养成记录环境所有安装包版本的习惯!
一些可有可无的初始化最近的发现,我的代码中,只因为类的初始化中多了一个初始化函数(一个比较大的函数,但是在实验中并没有用到它,只是初始化了一下),就导致结果不同。
相当于说,在实验中由于忘删了一行用不到但是初始化了的函数(这个函数比较大),而导致结果有出入,这一点以后也要注意一下。
- 固定随机种子
- 实验过程中不要随意切换torch版本,养成记录安装包的习惯
- 养成保存代码版本的习惯,出现结果和之前有出入的情况,对比代码,找出原因
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)