当前位置: 首页 > article >正文

设置随机种子保证网络可复现性

原文链接:https://zhuanlan.zhihu.com/p/141063432

为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,batch size 都是一样?固定随机数种子是非常重要的。但是如果你使用的是PyTorch等框架,还要看一下框架的种子是否固定了。还有,如果你用了cuda,别忘了cuda的随机数种子。这里还需要用到torch.backends.cudnn.deterministic.

benchmark 设置False,是为了保证不使用选择卷积算法的机制,使用固定的卷积算法。但是,就算是固定的卷积算法,由于其实现不同,也可能是不可控制的,即相同的值,同一个算法卷积出来有细微差别,deterministic设置True保证使用确定性的卷积算法,二者配合起来,才能保证卷积操作的一致性

因此将torch.backends.cudnn.deterministic这个 flag 置为True的话,每次返回的卷积算法将是确定的,即默认算法。如果配合上设置 Torch 的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的,代码大致这样:

def seed_everything(seed=1029):
    '''
    设置整个开发环境的seed
    :param seed:
    :param device:
    :return:
    '''
    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)
    # some cudnn methods can be random even after fixing the seed
    # unless you tell it to be deterministic
    torch.backends.cudnn.deterministic = True
	#如果torch.backends.cudnn.benchmark = False,那么模型的表现可能不是最优的,但reproducibility是比较强的
	torch.backends.cudnn.benchmark = False

http://www.kler.cn/news/156011.html

相关文章:

  • 智能优化算法应用:基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 有序表常见题型
  • 2023年GopherChina大会-核心PPT资料下载
  • Fiddler抓包工具之fiddler的常用快捷键
  • SpringAMQP入门案例——发送消息
  • Android CardView基础使用
  • 反序列化漏洞详解(三)
  • blender导出相机参数
  • ESP32使用mpu6050以及pid调参
  • Python - 字典3
  • 详解云WAF:免费GOODWAF归来
  • HarmonyOS—ArkTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化【鸿蒙专栏-11】
  • C语言实现Cohen_Sutherland算法
  • 构造函数的定义
  • Prometheus+Grafana搭建日志采集
  • Langchain-Chatchat的安装过程
  • C++基础 -35- string类
  • 操作系统·存储器管理
  • 亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
  • unordered_map与unordered_set的实现(含迭代器)
  • go使用aes加密算法
  • 【ArcGIS Pro微课1000例】0043:深度学习--框架库安装
  • 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(3)路由导航卫士、主页实现
  • Jupyter NoteBook未授权访问漏洞
  • 2024年天津财经大学珠江学院专升本专业课报名缴费操作流程
  • KALI LINUX入门
  • LC-1423. 可获得的最大点数(子数组和、枚举)
  • 牛客在线编程(SQL大厂面试真题)
  • 抓取检测(Grasp Dection)
  • U盘不仅能在电脑上使用,在手机上也可使用,包括安卓和苹果手机,但苹果的较特殊