神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一

  • 学习前言
  • 为什么每次训练结果不同
  • 什么是随机种子
  • 训练中设置随机种子

学习前言

好多同学每次训练结果不同,最大的指标可能会差到3-4%这样,这是因为随机种子没有设定导致的,我们一起看看怎么设定吧。
在这里插入图片描述

为什么每次训练结果不同

模型训练中存在很多随机值,最常见的有:
1、随机权重,网络有些部分的权重没有预训练,它的值则是随机初始化的,每次随机初始化不同会导致结果不同。
2、随机数据增强,一般来讲网络训练会进行数据增强,特别是少量数据的情况下,数据增强一般会随机变化光照、对比度、扭曲等,也会导致结果不同。
3、随机数据读取,喂入训练数据的顺序也会影响结果。
……
应该还有别的随机值,这里不一一列出,这些随机都很容易影响网络的训练结果。

如果能够固定权重、固定数据增强情况、固定数据读取顺序,网络理论上每一次独立训练的结果都是一样的。

什么是随机种子

随机种子(Random Seed)是计算机专业术语。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

按照这个理解,我们如果可以设置最初的 真随机数(种子),那么后面出现的随机数将会是固定序列。

以random库为例,我们使用如下的代码,前两次为随机生成,后两次为设置随机数生成器种子后生成。

import random# 生成随机整数
print("第一次随机生成")
print(random.randint(1,100))
print(random.randint(1,100))# 生成随机整数
print("第二次随机生成")
print(random.randint(1,100))
print(random.randint(1,100))# 设置随机数生成器种子
random.seed(11)# 生成随机整数
print("第一次设定种子后随机生成")
print(random.randint(1,100))
print(random.randint(1,100))# 重置随机数生成器种子
random.seed(11)# 生成随机整数
print("第二次设定种子后随机生成")
print(random.randint(1,100))
print(random.randint(1,100))

结果如下,前两次随机生成的序列不同,后两次设定种子后随机生成的序列相同:

第一次随机生成
66
37
第二次随机生成
93
56
第一次设定种子后随机生成
58
72
第二次设定种子后随机生成
58
72

训练中设置随机种子

一般训练会用到多个库包含有关random的内容。

在tensorflow2构建的网络中,一般都是使用下面三个库来获得随机数,我们需要对三个库都设置随机种子:
1、tensorflow2库;
2、numpy库;
3、random库。

在这里写了一个函数,:

#---------------------------------------------------#
#   设置种子
#---------------------------------------------------#
def seed_everything(seed=11):random.seed(seed)np.random.seed(seed)tf.random.set_seed(seed)

只需要在所有初始化前,调用该seed初始化函数即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/290289.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在.NET 应用程序中使用DSN-GBASE南大通用

在.NET 应用程序中使用GBASE南大通用 machine.config 文件中的资源时,首先需在工程中 引用 .NET Framework 的组件GBASE南大通用 System.configuration,然后使用 using 语句将GBASE南大通用System.configuration 命名空间中的类引入到工程中。 1) 在工…

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能,需要将对话内容流式返回给前端页面(类似GPT的效果)。下面直接说下如何实现: 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …

Ubuntu 常用命令之 gzip 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 gzip 是一个在 Linux 和 Unix 系统中常用的文件压缩工具。它的名字来源于 GNU zip,作为一个自由软件,它是 GNU 项目的一部分。gzip 命令通常用于压缩文件,以节省磁盘空间,或者减小文…

生成对抗网络与人工智能的完美融合:创新、艺术与未来

导言 生成对抗网络(GAN)作为一种深度学习框架,以其独特的生成能力引起广泛关注。生成对抗网络(GAN)与人工智能的结合不仅在科学领域引起了巨大的关注,也在艺术、医学等多个领域催生了令人振奋的创新。本文将…

gitee版本回退本地和仓库的执行步骤(后悔药,无副作用,按说明书使用)

目录 1.本地回退 1.打开项目文件夹 3.回退到指定版本 4.选择回退模式并确认 5.本地回退成功 2.回退仓库版本 1.在git上面找到项目的提交记录 2.找到提交错误的版本​编辑 3.双击新页面这个版本进去 点击操作再点击revert​编辑 4.确认回退 ​5.仓库回退成功 在使用…

自己制作指定格式的bmp文件

1、CAD绘制形状,设置区域方便接下里操作 2、导出为pdf(导出的png或者Jpg极度不清晰) 打印->自己设置->框选范围 3、截图截取制作的bmp范围,保存为bmp或png 我这里是通过snagit保存为png的 4、微软自带截图另存png为bmp&…

将qt程序注册成服务

将qt程序注册成服务 1、qt服务模块管理下载 qt-solutions 2、QtService项目 2.1、将qtservice拷贝到项目代码路径 2.2、实现服务管理 PS&#xff1a;响应服务的启停 CustomService.h #include <QCoreApplication> #include "qtservice.h"class CustomSer…

【yolov8系列】 yolov8 目标检测的模型剪枝

前言 最近在实现yolov8的剪枝&#xff0c;所以有找相关的工作作为参考&#xff0c;用以完成该项工作。 先细读了 Torch-Pruning&#xff0c;个人简单记录了下 【剪枝】torch-pruning的基本使用&#xff0c;有框架完成的对网络所有结构都自适应剪枝是最佳的&#xff0c;但这里没…

【C语言】自定义类型之联合和枚举

目录 1. 前言2. 联合体2.1 联合体类型的声明2.2 联合体的特点2.3 相同成员的结构体和联合体对比2.4 联合体大小的计算2.4 判断当前机器的大小端 3. 枚举3.1 枚举类型的声明3.2 枚举类型的优点3.3 枚举类型的使用 1. 前言 在之前的博客中介绍了自定义类型中的结构体&#xff0c;…

加速度|SHOPFA商城如何与阿里云短信融合

商城系统上线之后&#xff0c;需要与短信平台进行融合&#xff0c;当客户下完订单之后&#xff0c;能够接收到支付短信、发货短信、配送短信等进度提示信息。阿里云短信&#xff0c;作为国内领先的短信平台&#xff0c;隶属于阿里云计算有限公司&#xff0c;背后强大的研发团队…

苏宁易购商品详情API:电商实时数据

一、引言 在当前的电商行业中&#xff0c;数据是最为宝贵的资源之一。如何获取实时、准确的数据&#xff0c;对于电商业务的运营和优化至关重要。作为中国领先的电商平台之一&#xff0c;苏宁易购提供了丰富的API接口&#xff0c;其中包括商品详情API&#xff0c;以便第三方开…

flutter开发实战-第一帧布局完成回调实现

flutter开发实战-第一帧布局完成回调实现 在开发中&#xff0c;我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding&#xff0c;每种Binding都负责不同的功能。下面是Flutter中常见的Binding&#xff1a; 这里简单…