首先設置任意種子:
SEED=666
對於pytorch
torch.manual_seed(SEED)
torch.cuda.manual_seed_all(SEED)
np.random.seed(SEED)
random.seed(SEED)
torch.backends.cudnn.deterministic = True
tensorflow在使用gpu時由於cudnn中分配GPU多線程的隨機問題,復現結果需要NVIDIA官方的一個tensorflow gpu庫,支持tf版本1.14-2.x(參考 https://github.com/NVIDIA/framework-determinism)
先shell安裝庫:
pip install tensorflow-determinism
對於tensorflow 1.14 或 1.15:
from tfdeterminism import patch
patch()
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.set_random_seed(SEED)
對於tensorflow 2.0:
from tfdeterminism import patch
patch()
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)
對於tensorflow 2.4:
os.environ['TF_DETERMINISTIC_OPS'] = '1'
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)