python - 何时使用 numpy.random.randn(...) 以及何时使用 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])
但他们没有说明原因,因为代码在这两种情况下都有效,而且该练习有一个文档,所以我找出了错误,但是如何、何时以及为什么要从这两种情况中选择呢?
解决方案
rand
和之间的区别randn
是(除了字母n
)返回从区间 [0,1) 上的均匀分布rand
采样的随机数,而取而代之的是从均值为 0、方差为 1的正态(也称为高斯)分布采样。randn
换句话说,由 产生的随机数的分布rand
如下所示:
在均匀分布中,所有随机值都被限制在一个特定的区间内,并且均匀分布在该区间内。如果你用 生成 10000 个随机数rand
,你会发现其中大约 1000 个在 0 和 0.1 之间,大约 1000 个在 0.1 和 0.2 之间,大约 1000 个在 0.2 和 0.3 之间,依此类推。所有这些都将在 0 和 1 之间——你永远不会得到任何超出该范围的值。
同时, 的分布randn
如下所示:
均匀分布和正态分布之间的第一个明显区别是正态分布没有上限或下限——如果你用 生成足够多的随机数randn
,你最终会得到一个与你一样大或一样小的随机数(好吧,主题无论如何,用于存储数字的浮点格式的限制)。但是你将得到的大多数数字仍然相当接近于零,因为正态分布不是平坦的:randn
比介于 0.9 和 1 之间的输出更可能落在 0 和 0.1 之间,而对于rand
这两种可能性都一样。事实上,如图所示,所有randn
输出中约有 68% 介于 -1 和 +1 之间,而 95% 介于 -2 和 +2 之间,约 99.7% 介于 -3 和 +3 之间。
这些是完全不同的概率分布。如果你把一个换成另一个,事情几乎肯定会坏掉。如果代码没有简单地崩溃,那么您几乎肯定会得到不正确和/或荒谬的结果。
推荐阅读
- python - How to get all element in list after matched string in python
- leaflet - 传单地图上的中心轨迹(geoJSON 数据)
- css - 故事书 - 包含资产文件夹中的 css 返回“拒绝包含...”错误
- javascript - Detect URL change in querystring
- javascript - JavaScript: How to copy all properties of Object to a Class variables?
- python - Python Jupyter 安装 line_profiler 失败
- visual-studio-code - 在 VSCode 中关闭 TypeScript 的单一设置
- java - 如何使用 Jersey 框架为 springboot 应用程序 REST 创建工作测试用例
- python - Shortest paths in graph with labeled edges
- github - Github Actions, how to share a calculated value between job steps?