如何设置随机种子保证pytorch代码的可复现性
缘起
在深度学习研究领域,论文结果的可复现性是一个很大的问题.遑论各种paper中的代码,有时候就是自己写的代码,都难以保证可复现性:即使使用同样的网络结构,同样的数据库,在同一台机器上训练,训练的结果都有差别.这一现象很大程度上是由于深度学习训练过程中的随机性造成的.
- 网络参数的随机初始化
- 正则化方法,例如dropout在训练中随机丢弃网络中的节点
- 优化过程,例如SGD,RMSPorp或者Adam等方法也涉及随机初始化
Tips: pytorch的可复现性会受到pytorch版本和操作系统平台的影响.
示例代码
下面通过一个例子来演示如何设置pytorch的随机种子
# Train a model to fit a line y=mx using given data points
import torch
## Uncomment the two lines below to make the training reproducible.
#seed = 3
#torch.manual_seed(seed)
# set device to CUDA if available, else to CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Device:', device)
# N - number of data points
# n_inputs - number of input variables
# n_hidden - number of units in the hidden layer
# n_outputs - number of outputs
N, n_inputs, n_hidden, n_outputs = 5, 1, 100, 1
# Input 7 pairs of (x, y) input values
x = torch.tensor([[0.0], [1.0],

本文详述了在深度学习中确保PyTorch代码复现性的关键步骤,包括设置随机种子、调整CuDNN行为及numpy初始化,通过实例展示了如何消除训练结果的随机波动。
最低0.47元/天 解锁文章
992

被折叠的 条评论
为什么被折叠?



