Почему установка `random.seed (42)` не дает мне идентичные результаты в pytorch? - PullRequest
0 голосов
/ 29 июня 2019

Я устанавливаю случайное начальное число для random и numpy.random в начале моего основного файла:

import random
import numpy as np
np.random.seed(42)
random.seed(42)
import torch

Тем не менее, когда я создаю объект Net () со случайно инициализированными параметрами, он каждый раз дает совершенно другой результат:

net=neuralnet.Net()
print ("initialized params: ", net.fc1.weight)

Обратите внимание, что neuralnet.Net() находится в другом файле и является классом, который расширяет torch.nn.Module. torch.nn.Module случайным образом инициализирует net.fc1.weight, а не мой собственный код.

Как это возможно, что когда я создаю объект Net () со случайно инициализированными параметрами, он каждый раз дает совершенно другой результат?

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

попробовать:

import torch
torch.manual_seed(0)

Для получения дополнительной информации: https://pytorch.org/docs/stable/notes/randomness.html

0 голосов
/ 29 июня 2019

Вы смотрели на: https://github.com/pytorch/pytorch/issues/7068?

Есть несколько рекомендаций о том, как воспроизвести результаты.

Пример:

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

features = torch.randn(2, 5)

# Print stuff.
fnp = features.view(-1).numpy()

print("Time: {}".format(dt.datetime.now()))
for el in fnp:
    print("{:.20f}".format(el))

print("Python: {}".format(sys.version))
print("Numpy: {}".format(np.__version__))
print("Pytorch: {}".format(torch.__version__))
...