从零构建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
相关产品推荐
相关产品推荐

