因此,我正在学习对神经网络进行编码的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岁起就是数学家。
答案 0 :(得分:1)
如果通过不同方式引用了np.random.random()
的参数,那是因为您要创建具有不同形状/尺寸的权重。在此示例中(忽略偏差),您尝试从尺寸3的输入转到尺寸1的输出。在一层中,您需要形状(3,1)
。对于两层,您需要形状(3,n)
和(n,1)
,其中n
是任意整数。这仅仅是为了确保矩阵乘法有效。在这里n = 4
被选择为隐藏层尺寸。