在訓(xùn)練seq2seq的過程中茅主,固定了所有seed土榴,
random.seed(args.seed)
os.environ['PYTHONHASHSEED'] =str(args.seed)
np.random.seed(args.seed)
torch.manual_seed(args.seed)
torch.cuda.manual_seed(args.seed)
torch.cuda.manual_seed_all(args.seed)
torch.backends.cudnn.deterministic =True
訓(xùn)練的loss诀姚,前100是一模一樣的玷禽,但是100開始會慢慢出現(xiàn)小數(shù)點后幾位的不同。
原來是decoder端在使用copy機制的時候用了torch.Tensor.scatter_add_()導(dǎo)致的糯笙。
目前這個方法在GPU上使用時帶來的隨機性沒法兒避免。
https://pytorch.org/docs/stable/notes/randomness.html