网络编程
位置:首页>> 网络编程>> Python编程>> pytorch通过训练结果的复现设置随机种子

pytorch通过训练结果的复现设置随机种子

作者:tianren9  发布时间:2021-04-19 07:58:53 

标签:pytorch,结果,复现,随机种子

通过设置全局随机种子使得每次的训练结果相同可以复现


def seed_torch(seed=2018):
   random.seed(seed)
   os.environ['PYTHONHASHSEED'] = str(seed)
   np.random.seed(seed)
   torch.manual_seed(seed)
   torch.cuda.manual_seed(seed)
   torch.backends.cudnn.deterministic = True

这里我主要讲一下模型在复现结果遇到的一些问题。

首先在固定随机种子之后,每次模型训练出来的结果一定是一样的,如果不相同,那么说明训练过程中一定还有一部分随机性操作没有被固定。

将模型参数保存下来,然后加载模型参数进行测试,如果发现结果和训练过程中得到的结果有差异。

这个时候就需要按照以下步骤进行分析:

1、先改变batchsize,看看实验复现的结果是否会发生变化。如果发生变化就说明batchsize会影响模型推理过程中的参数。

2、检查一下forward中有哪些参数跟batchsize有关,或者是不是代码写错了。比如batchsize就会影响LSTM的模型参数的初始化。

3、最后检查测试集划分batch的时候是否都一样。


test_loader = DataLoader(test_dataset, batch_size=batchsize, shuffle=True, num_workers=4, pin_memory=True)

比如这样一行代码,测试集每次都被打乱了,虽然固定了随机种子,但是这样只能保证第k轮的随机种子是一样的,而第1轮和第10轮的随机种子是不一样的。

这样的话,比如模型在第13个epoch收敛,得到的结果在是第13轮的测试集进行测试的,而模型在加载的时候是在第一轮的测试进行测试的,结果自然有差异。

来源:https://blog.csdn.net/u010589524/article/details/89371919

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com