在3层神经网络中初始化权重

时间:2018-07-17 13:40:52

标签: python neural-network

因此,我正在学习对神经网络进行编码的SIMPLEST方法,该方法可以根据需要进行多种修改,基本上就像模板一样。我发现我是trask的11行神经网络代码,权重初始化非常合理:

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

但是,当我查看其扩展的3层网络时,它看起来像这样:

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

我会理解syn1是否有点不同,但是两者现在都不同了!他没有解释,仅发表评论说:“以均值0随机初始化我们的权重。”

有人可以向我解释其背后的数学推理吗?如果您愿意的话,快疯了,我从5岁起就是数学家。

1 个答案:

答案 0 :(得分:1)

如果通过不同方式引用了np.random.random()的参数,那是因为您要创建具有不同形状/尺寸的权重。在此示例中(忽略偏差),您尝试从尺寸3的输入转到尺寸1的输出。在一层中,您需要形状(3,1)。对于两层,您需要形状(3,n)(n,1),其中n是任意整数。这仅仅是为了确保矩阵乘法有效。在这里n = 4被选择为隐藏层尺寸。