我已经设置了这样的种子(希望涵盖所有基础):
random.seed(666)
np.random.seed(666)
torch.manual_seed(666)
torch.cuda.manual_seed_all(666)
torch.backends.cudnn.deterministic = True
下面的代码仍然会为两者输出不同的批次namesTrainLoader1
,namesTrainLoader2
但它们应该是相同的。为什么创建model
会影响确定性值?
namesDataset = NamesDataset()
namesTrainLoader1 = DataLoader(namesDataset, batch_size=5, shuffle=True)
for each in namesTrainLoader1:
print(each)
model = TorchRNN(inputSize, hiddenSize, outputSize)
namesTrainLoader2 = DataLoader(namesDataset, batch_size=5, shuffle=True)
for each in namesTrainLoader2:
print(each)
输出namesTrainLoader1
:
('saiki', 'close', 'sloan', 'horos', 'roman')
...
输出namesTrainLoader2
:
('david', 'abeln', 'hatit', 'holan', 'protz')
...
我也尝试在 中使用worker_init_fn
(例如使用 lambda x: 0)DataLoader
,但这并没有什么区别。
为什么这不是确定性的?我怎样才能使它具有确定性?即重置内部种子DataLoader
?