在我的深度学习练习中,我必须初始化一个与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])但是他们没有指定原因,因为代码在两种情况下都有效,并且有一个练习的文档,所以我找出了错误,但是如何,何时以及为什么从这两种情况中进行选择? 最佳答案 rand和randn之间的区别是(字母n除外),rand返回在间隔[0,1)内从uniform distribution采样的随机数,而randn则从的平均值为0,方差为1。换句话说,由rand产生的随机数的分布如下所示:normal (a.k.a. Gaussian) distribution在均匀分布中,所有随机值都被限制在特定间隔内,并在该间隔内均匀分布。如果使用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之间。这些是完全不同的概率分布。如果将一个切换为另一个,则几乎肯定会中断。如果代码不仅崩溃,几乎肯定会得到不正确和/或荒谬的结果。关于python - 什么时候使用numpy.random.randn(…)?什么时候使用numpy.random.rand(…)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57863277/
10-12 16:53