| 
 
 以下代码于主程序运行之前一次即可,亲测可行。  
Tensorflow/Keras 
def seed_tensorflow(seed=42):
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)
    tf.set_random_seed(seed)
  
Pytorch 
def seed_torch(seed=42):
    seed = int(seed)
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
    torch.backends.cudnn.enabled = False
  
 
 解释:  1 torch.manual_seed(seed)是cpu情况下的seed  2 torch.cuda.manual_seed(seed)是单GPU情况下的seed  3 torch.cuda.manual_seed_all(seed)是多GPU情况下的seed  4 torch.backends.cudnn.deterministic = True和下述的benchmark搭配使用,确定卷积算法的类型。  5 torch.backends.cudnn.benchmark = False是cudnn使用确定性卷积,而不是使用优化提速型的卷积  (这个的意思是cudnn在开始时会对模型的每个卷积层使用合适的卷积算法加速,由于卷积网络的kernel大小,数量,计算方式等等,选用合适的卷积算法会使得后续计算加快) 速度会慢,但是可复现  6 torch.backends.cudnn.enabled = False 直接不使用cudnn底层加速。  
  
 
 参考:【个人思考】深度学习模型稳定可复现,设定随机种子大全  
 
                
                
                
        
    
 
 |