【发布时间】:2018-04-24 17:12:59
【问题描述】:
numpy.random.rand 和numpy.random.randn 有什么区别?
从文档中,我知道它们之间的唯一区别是每个数字的概率分布,但整体结构(维度)和使用的数据类型(浮点数)是相同的。因此,我很难调试神经网络。
具体来说,我正在尝试重新实现Neural Network and Deep Learning book by Michael Nielson 中提供的神经网络。原代码可以在here找到。我的实现和原来的一样;但是,我改为在 init 函数中使用 numpy.random.rand 定义和初始化权重和偏差,而不是如原始所示的 numpy.random.randn 函数。
但是,我使用random.rand 初始化weights and biases 的代码不起作用。网络不会学习,权重和偏差不会改变。
导致这种怪异的两个随机函数之间有什么区别?
【问题讨论】:
-
前者来自均匀分布,后者来自正态分布。 “为什么从正态分布中提取的初始权重在深度学习中效果更好”更适合Cross Validated。这与 numpy 或深度学习框架完全无关。
-
@ayhan 感谢您的评论。我认为这是一个 numpy 问题,而不是初始权重问题,因为即使我将权重初始化为零,我的性能也比使用
random.randn初始化最差,但网络仍然可以学习。而如果我使用random.rand,网络只会一遍又一遍地重复初始结果,却什么也没学到。
标签: python numpy neural-network numpy-random