python - 在 3 层神经网络中初始化权重
问题描述
因此,我正在学习编写神经网络的最简单方法,一种可以根据您的需要以多种方式进行修改的方法,基本上就像一个模板。我发现我是 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 岁开始就是数学家。
解决方案
如果不同,您指的是 的参数np.random.random()
,那么这是因为您正在创建具有不同形状/尺寸的权重。在此示例中(忽略偏差),您尝试从维度 3 的输入到维度 1 的输出。对于一层,您需要 shape (3,1)
。对于两层,您需要形状(3,n)
和(n,1)
,其中n
是任意整数。这只是为了确保矩阵乘法有效。这里n = 4
被选为隐藏层维度。
推荐阅读
- java - 如何在没有 JPA 的情况下实现持久锁?
- javascript - Javascript 导入。“@”的含义是什么?
- libsodium - libsodium 中的基本群算术
- c++ - 得到错误:即使在实现所有虚拟方法之后,对“vtable for REDirect”的未定义引用
- html - Bootstrap 4 粘页脚问题
- ms-access - 在 MS Access 中按触发器删除记录
- python - 如何在 python 中从我的 JSON 文件中获取一个值
- javascript - 如何在我的简单 Javascript 游戏中改进碰撞检测
- citrus-framework - Citrus 框架 - 回声动作不会“回声”
- javascript - 如何使用嵌套游标从 IndexedDB 读取数据?