You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从零构建ANN:增加隐藏层神经元的实现是否正确?

确认隐藏层神经元数量增加的实现是否正确

你的实现确实成功将隐藏层神经元数量从10个增加到了20个,整体逻辑是正确的,下面拆解验证:

1. 核心维度匹配验证

你修改后的参数形状完全符合两层神经网络的维度规则:

  • W1形状为(20, 784):对应隐藏层20个神经元,每个神经元与输入层784个神经元连接,权重维度正确。
  • b1形状调整为(20, 1):每个隐藏层神经元对应一个偏置,完美解决了之前的广播维度不匹配错误——W1.dot(X)输出形状为(20, batch_size),和(20,1)的偏置可以通过numpy广播正常相加。
  • W2形状改为(10, 20):输出层10个神经元,每个与隐藏层20个神经元连接,能正确与激活后的隐藏层输出A1(形状(20, batch_size))执行矩阵乘法。

你修改后的初始化函数代码:

def init_parameters():
    W1 = np.random.normal(size=(20, 784)) * np.sqrt(1./(784))
    b1 = np.random.normal(size=(20, 1)) * np.sqrt(1./10)
    W2 = np.random.normal(size=(10, 20)) * np.sqrt(1./20)
    b2 = np.random.normal(size=(10, 1)) * np.sqrt(1./(784))
    return W1, b1, W2, b2

2. 初始化的小优化建议

虽然代码能正常运行,但初始化的缩放因子有两处可以调整得更合理:

  • b1的缩放因子np.sqrt(1./10):这里的10是旧隐藏层的神经元数,建议改为对应输入层的784,或者遵循ReLU激活的He初始化规则,使用np.sqrt(2./784)(ReLU激活通常用He初始化,即sqrt(2/输入维度),能避免神经元输出过早饱和)。
  • b2的缩放因子np.sqrt(1./784):输出层偏置的缩放因子建议对应隐藏层的神经元数20,或者直接用小尺度随机初始化即可,因为偏置对模型初始化的影响远小于权重。

总结

你已经正确完成了隐藏层神经元数量的扩充,当前代码的维度逻辑完全没问题,只需根据激活函数调整初始化缩放因子进一步优化即可。

内容的提问来源于stack exchange,提问作者zellez11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:50:22