深度学习每次结果不一样


深度学习算法在开始训练的时候,都会对神经网络进行初始化,这个初始化是由随机数来确定的。我们如果使用同一个数据,同一个网络,同样的参数设置,由于随机初始化的不同,有可能会得到不一样的结果。其实深度学习就是这样设计的,其目的之一是为了获得一个泛化能力更强的结果来。如果想要每次的结果都一样,那么就需要设置随机数生成器。

为什么不一样

我们做个实验:

import numpy as np
from numpy.random import seed
print("不设置随机种子数,输出随机数")
for i in range(5):
	print(np.random.rand(1))
	
print("设置随机种子数,输出随机数")
for j in range(5):
	seed(1234) # 这里的seed的值随便设置
	print(np.random.rand(1))

输出结果:
在这里插入图片描述
不设置seed随机数,生成的随机数每次都是随机的。设置了seed随机数后,生成的随机数都是一样的。如果在深度学习中,不设置seed随机数,就意味着深度学习的输入每次的输入是不一样的。那么在深度学习中常见的利用随机数有很多地方,比如权值初始化、Dropout的正则化的随机性、优化器的随机性等等。一般来说,机器学习提倡使用不同的随机数,因为这样能够提高结果的泛化能力,即效果更好。但是有时候我们需要给定随机性。

如何使得他们一样

其实一种比较简单但费时的方法就是进行多次训练,比如对某个数据进行100次学习,然后将结果进行汇总平均,得到的结果正常情况下是相同的。如果依然有较大差别的话,首先考虑模型是否合适,或者更换模型。再就是对产生的随机数进行100%固定,这样就可以得到相同的结果了。

使用不同的库,随机数的设置不同,主要有下面几个设置:

  • python设置随机数
import random
random.seed(1234)
  • numpy设置随机数
from numpy.random import seed
seed(1234)
  • tensorflow1设置随机数
import tensorflow as tf
tf.random.set_random_seed(1234)
  • tensorflow2版本下的tensorflow1设置随机数
import tensorflow as tf
tf.compat.v1.set_random_seed(1234)
  • tensorflow下的keras设置随机数
import tensorflow as tf
tf.keras.utils.set_random_seed(1234)
  • tensorflow2设置随机数
import tensorflow as tf
tf.random.set_seed(1234)
  • pytorch设置随机数
import torch
torch.manual_seed(1234)
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下0516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值