因此,我正在学习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 回答
如果不同,你指的是
np.random.random()
的参数,那是因为你正在创建具有不同形状/尺寸的权重 . 在此示例中(忽略偏差),您尝试从维度3的输入转换为维度1的输出 . 对于一个图层,您需要形状(3,1)
. 对于两个图层,您需要形状(3,n)
和(n,1)
,其中n
是任何整数 . 这只是为了确保矩阵乘法有效 . 这里n = 4
被选为隐藏层维度 .