tensorflow、keras和pytorch中控制随机种子以达到可复现的结果

2 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了如何在Tensorflow和Pytorch中设置随机种子以确保深度学习模型的训练过程可复现。在Tensorflow中,通过seed_tensorflow函数设置多个种子;在Pytorch中,使用seed_torch函数,包括针对CPU、单GPU及多GPU的种子设置,并调整CUDNN的行为以实现确定性。这些步骤对于研究和验证模型至关重要。
摘要由CSDN通过智能技术生成

以下代码于主程序运行之前一次即可,亲测可行。

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底层加速。

参考:【个人思考】深度学习模型稳定可复现,设定随机种子大全

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值