【问题标题】:Difference between np.random.seed(1) and np.random.seed(0)?np.random.seed(1) 和 np.random.seed(0) 的区别?
【发布时间】:2018-05-12 09:06:20
【问题描述】:

我正在寻找一个网络。我发现这个话题https://iamtrask.github.io/2015/07/12/basic-python-network/

进展顺利,但我无法理解那部分:

# seed random numbers to make calculation
# deterministic (just a good practice)

np.random.seed(1)

# initialize weights randomly with mean 0
syn0 = 2 * np.random.random((3, 1)) - 1

那么np.random.seed(1) 是什么意思?为什么不是(0)? (1) 的意思是什么) 页面作者说“用均值 0 随机初始化权重”

syn0 = 2 * np.random.random((3, 1)) - 1

安权重是什么意思?

【问题讨论】:

  • 为随机数生成器播种似乎很奇怪。每次运行程序时,播种它都会导致相同的“随机”数字序列。 “with mean 0”表示它将返回 -1 和 1 之间的值。如果均匀分布,则平均值将为 0。
  • 如何通过乘“2”返回-1和1之间并提取“1”????
  • 我对 Python 随机函数不熟悉,所以我猜它返回一个介于 0 和 1 之间的数字浮点数。如果将其加倍,则得到 0 和 2 之间。减去 1它是 -1 到 1。我不知道 list 参数是什么,所以我可能错了。
  • @Alper Kutlu :在这种情况下,np.random 给出的随机数 x 介于 0 和 1 之间。现在,为了获得介于 -1 和 1 之间的随机数,您可以使用简单的数学技巧:让 a = -1 和 b = 1。因为 a (ba) > 0。所以不等式 0

标签: python python-3.x numpy random artificial-intelligence


【解决方案1】:

问题 #1:

出于实际目的,没有区别,它只是每次运行程序时获取相同随机数的一种方式。随意阅读维基百科的更多细节:https://en.wikipedia.org/wiki/Random_seed

问题 #2:

使用零均值权重初始化 ANN 是一种很好的做法,通常会显示出良好的收敛行为。查看此页面了解更多详情:http://cs231n.github.io/neural-networks-2/#init

因此,我们仍然希望权重非常接近于零,但是因为 我们在上面争论过,不完全为零。作为解决方案,它是 常见的是将神经元的权重初始化为小数字和 将这样做称为对称性破坏。这个想法是神经元 一开始都是随机且唯一的,因此它们将计算 不同的更新并将自己整合为完整的不同部分 网络。

Quora 帖子中有更多关于该主题的讨论:https://www.quora.com/Why-does-it-work-to-initialize-weights-of-a-deep-Neural-Network-to-zero-plus-some-noise-N-0-epsilon-and-not-anything-else

【讨论】:

  • 感谢您的回答,但我仍有第二个问题: syn0 = 2 * np.random.random((3, 1)) - 1 为什么我们与“2”相乘以及为什么我们提取“ 1" 是什么意思?我无法理解 2 和 1 值
  • @AlperKutlu 使其居中/均值 = 0。你也可以做 1 * random - 0.5。但那更难看。如果您不知道,请阅读 random.random 返回的内容。
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 2020-02-10
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多