PyTorch 非确定性辍学
PyTorch non-deterministic dropout
我正在尝试使 BLSTM 的输出具有确定性,经过调查发现我的 dropout 层似乎创建了不确定的 dropout 掩码,因此我正在研究如何修复 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 中获得确定性输出
每次您想要相同的输出时,您都需要重新设置随机种子,因此:
>>> 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
中构建神经网络时您会发现很多不同的随机性
我正在尝试使 BLSTM 的输出具有确定性,经过调查发现我的 dropout 层似乎创建了不确定的 dropout 掩码,因此我正在研究如何修复 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 中获得确定性输出
每次您想要相同的输出时,您都需要重新设置随机种子,因此:
>>> 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
中构建神经网络时您会发现很多不同的随机性