seed在模型中的应用及用法

SEED
seed在深度学习代码中叫随机种子,设置seed的目的是由于深度学习网络模型中初始的权值参数通常都是初始化成随机数。而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感,设置了seed就相当于规定了初始的随机值。
设置随机种子的方法能够近似的完全复现作者的开源深度学习代码,随机种子的选择能够减少一定程度上算法结果的随机性,也就是更接近于原始作者的结果

即产生随机种子意味着每次运行实验,产生的随机数都是相同的

在深度学习代码中可以使用以下函数

def seed_all(seed):
    if not seed:
        seed = 0

    log("[ Using Seed : ", seed, " ]")

    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.cuda.manual_seed(seed)
    np.random.seed(seed)
    dgl.random.seed(seed)
    random.seed(seed)

torch.manual_seed(seed)
设置CPU生成随机数的种子

# test.py
import torch
torch.manual_seed(0)
print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数

tensor([0.4963]) #每次都会输出这个值

torch.cuda.manual_seed_all(seed)
torch.cuda.manual_seed_all()则是为所有的GPU设置种子。

torch.cuda.manual_seed(seed)
表示在GPU中设置生成随机数的种子。当设置的种子固定下来的时候,之后依次pytorch生成的随机数序列也被固定下来。需要注意的是当只调用torch.cuda.manual_seed()一次时并不能生成相同的随机数序列。如果想要得到相同的随机数序列就需要每次产生随机数的时候都要调用一下torch.cuda.manual_seed()。

dgl.random.seed(seed)
在DGL中设置随机方法的种子。

random.seed(seed)
random.seed() 会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;如果不设置这个值,则系统会根据时间来自己选择这个值,此时每次生成的随机数会因时间的差异而有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值