PyTorch种子会影响滤除层吗?

时间:2018-10-09 23:01:29

标签: machine-learning neural-network deep-learning pytorch random-seed

我遇到了播种神经网络以获得可重现结果的想法,并且想知道火炬播种是否会影响辍学层,以及播种我的训练/测试的正确方法是什么?

我正在阅读文档here,想知道仅放置这些行是否足够?

torch.manual_seed(1)
torch.cuda.manual_seed(1)

2 个答案:

答案 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)