我遇到了播种神经网络以获得可重现结果的想法,并且想知道火炬播种是否会影响辍学层,以及播种我的训练/测试的正确方法是什么?
我正在阅读文档here,想知道仅放置这些行是否足够?
torch.manual_seed(1)
torch.cuda.manual_seed(1)
答案 0 :(得分:1)
您可以使用以下几行代码轻松回答您的问题:
import torch
from torch import nn
dropout = nn.Dropout(0.5)
torch.manual_seed(9999)
a = dropout(torch.ones(1000))
torch.manual_seed(9999)
b = dropout(torch.ones(1000))
print(sum(abs(a - b)))
# > tensor(0.)
是的,使用manual_seed
就足够了。
答案 1 :(得分:0)
实际上这取决于您的设备:
如果 CPU:
torch.manual_seed(1) == true
。如果 cuda:
torch.cuda.manual_seed(1)=true
torch.backends.cudnn.deterministic = True
最后,使用以下代码可以确保结果在 python、numpy 和 pytorch 之间可重现。
def setup_seed(seed):
random.seed(seed)
numpy.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
setup_seed(42)