以下代码于主程序运行之前一次即可,亲测可行。
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底层加速。Original: https://blog.csdn.net/weixin_43325818/article/details/119684296
Author: VirgilG72
Title: tensorflow、keras和pytorch中控制随机种子以达到可复现的结果
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/520925/
转载文章受原作者版权保护。转载请注明原作者出处!