繁体   English   中英

什么时候使用numpy.random.randn(…)?什么时候使用numpy.random.rand(…)?

[英]When to use numpy.random.randn(…) and when numpy.random.rand(…)?

在我的深度学习练习中,我必须初始化一个与A1大小相同的参数D1,所以我要做的是:

D1 = np.random.randn(A1.shape[0],A1.shape[1]) 

但是在计算了进一步的方程后,当我检查结果不匹配时,在正确阅读文档后,我发现他们说用rand而不是randn初始化D1;

D1 = np.random.rand(A1.shape[0],A1.shape[1]) 

但是他们没有指定原因,因为代码在两种情况下都有效,并且有一个练习的文档,所以我找出了错误,但是如何何时以及为什么从这两种情况中进行选择?

randrandn之间的区别是(字母n除外), rand返回在间隔[0,1)上从均匀分布中采样的随机数,而randn则从平均值为0的正态(aka高斯)分布中采样,方差为1。

换句话说, rand产生的随机数的分布如下所示:

均匀分布

在均匀分布中,所有随机值都被限制在特定间隔内,并在该间隔内均匀分布。 如果使用rand生成10000个随机数,则会发现其中大约1000个介于0和0.1之间,大约1000个介于0.1和0.2之间,大约1000个介于0.2和0.3之间,依此类推。 所有这些都将在0到1之间-您将永远不会超出该范围。

同时, randn的分配如下所示:

正态分布

均匀分布和正态分布之间的第一个明显区别是,正态分布没有上限或下限-如果使用randn生成足够的随机数,最终将得到一个任意大小的(嗯,无论如何,都受用于存储数字的浮点格式的限制)。 但是您将获得的大多数数字仍将非常接近零,因为正态分布并不平坦: randn的输出很有可能落在0到0.1之间,而不是0.9到1之间,而对于rand ,这两种可能性都是一样的。 实际上,如图所示,所有randn输出中约有68%介于-1和+1之间,而95%则介于-2和+2之间,约99.7%介于-3和+3之间。

这些是完全不同的概率分布。 如果将一个切换为另一个,则几乎肯定会中断。 如果代码不只是崩溃,几乎肯定会得到不正确和/或荒谬的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM