PyTorch非确定性辍学

时间:2020-06-02 13:03:43

标签: python pytorch random-seed dropout

我正在尝试使BLSTM的输出具有确定性,在调查了它的出现似乎表明我的辍学层创建的不是确定性的辍学蒙版之后,所以我正在研究如何在pytorch中修复随机种子。我发现了this page和其他建议,尽管我将所有内容都放入了代码中并没有帮助。这是我的代码:

import sys 
import random 
import datetime as dt 

import numpy as np 
import torch 

torch.manual_seed(42) 
torch.cuda.manual_seed(42) 
np.random.seed(42)
random.seed(42) 
torch.backends.cudnn.deterministic = True  

ex = torch.ones(10) 
torch.nn.functional.dropout(ex, p=0.5, training=True)                  
# Out[29]: tensor([0., 0., 2., 0., 0., 0., 0., 0., 2., 2.])

torch.nn.functional.dropout(ex, p=0.5, training=True)                  
# Out[30]: tensor([0., 2., 0., 2., 2., 0., 0., 2., 2., 2.])

请帮助我从相同输入的Dropout获取确定性输出

1 个答案:

答案 0 :(得分:0)

每次您想要相同的输出时,都需要再次重置随机种子,以便:

>>> import torch

>>> torch.manual_seed(42)
<torch._C.Generator object at 0x127cd9170>

>>> ex = torch.ones(10)

>>> torch.nn.functional.dropout(ex, p=0.5, training=True)
tensor([0., 0., 2., 2., 2., 2., 2., 0., 2., 0.])

>>> torch.manual_seed(42)
<torch._C.Generator object at 0x127cd9170>

>>> torch.nn.functional.dropout(ex, p=0.5, training=True)
tensor([0., 0., 2., 2., 2., 2., 2., 0., 2., 0.])

尽管您通常可能希望继续重置所有这些随机种子,但是在python中构建神经网络时会发现很多不同的随机性