训练神经网络时的随机数生成seed的用法

本文介绍了随机数生成的常见场景,如验证码、游戏、数据集划分和神经网络初始化。随机种子用于确保可重复性,不同的种子值对应不同的随机数序列。在同一环境中,设置相同的随机种子能保证每次生成的随机数一致。在Python中,使用random、numpy、tensorflow和torch等库时,需分别设置种子以保持一致性。在循环中生成随机数要注意种子的设定位置,以控制随机数序列的变化或固定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在什么情况下我们需要生成随机数

        生活中时常遇到这些情况,需要生成验证码;或玩数字炸弹游戏需要生成随机数字;亦或用random来生成随机数比例,分配训练集、验证集、测试集;或者训练神经网络时某些参数需要随机初始化时都需要用到随机数。

        在训练神经网络时,很多时候我们会选择某一种分布来随机初始化我们的参数,而不是全部初始化为0,因为初始参数为0的神经元很难被激活,而且用不同的分布(甚至是同一种分布)来初始化参数时,模型的训练结果可能会存在一定的差异,因此为了保证模型结果的可复现,就需要保证每一次初始化的参数都不变,这就引入了随机种子。

2.随机种子不同的值代表什么

        我们会发现,可能不同的代码中,有时候seed=1,有时候seed=100,这不同的seed又代表什么东西呀!其实不同的值,你可以粗暴的认为随机种子背后就是一个巨大的字典,而这里的seed值就是这个字典的key,生成的随机数就是字典的value值,只要你key不变,value就不变。而既然是初始化,那其实选择哪个value都可以,只要每一次选择的value都一样就行,所以seed等于啥不重要,相同就行。

 3.使用随机种子生成随机数时需要注意的问题

        我们调什么包(random还是numpy.random)什么框架(tensorflow还是pytorch)来生成随机数,甚至是用CPU还是GPU来生成随机数,都要先用对应的方式生成生成器,如果用到其中的多种,则需要先定义好多种生成器,然后用同种生成器生成的随机数就是相同的(注意不同生成器生成的随机数不一定是相同的)。具体如下:

import random
import numpy as np
import tensorflow as tf
import torch

seed = 100
random.seed(seed)  # random
np.random.seed(seed)  # numpy
tf.random.set_seed(seed)  # tensorflow
torch.manual_seed(seed)  # torch+CPU
torch.cuda.manual_seed(seed)  # torch+GPU

        另外,注意对于for循环中生成随机数,如果在循环的外面定义生成器,循环内部生成随机数,则每次循环生成的随机数不一样,但是重跑这个循环则会生成一样的随机数序列;而如果两者都在循环内部,则每次循环都生成一样的随机数。如下所示:

for i in range(1, 4):
    random.seed(1)
    print(random.randrange(10))
执行一次输出结果:
2
2
2
执行第二次输出结果(多少次结果都一样):
2
2
2

random.seed(1)
for i in range(1, 4):
    print(random.randrange(10))
执行一次输出结果:
2
9
1
执行第二次输出结果(多少次结果都一样):
2
9
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值