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

C++从零实现反向传播神经网络训练XOR不收敛问题求助

问题根因定位

你代码的bug出在activate函数的加权求和逻辑里,累加前层输出时没有乘对应神经元的权重,相当于所有权重都被强制固定为1使用,网络自然无法学到输入和输出之间的映射关系。

修复后的activate函数代码

std::vector<float> activate(std::vector<float> inputs) {
    outputs[0] = inputs; /* the "outputs" of the first layer are the inputs  */
    for(int l = 1; l < layers.size(); l++)
      for(int n = 0; n < layers[l]; n++) {
        float sum = weights[l][n][layers[l-1]]; // bias
        for(int w = 0; w < layers[l-1]; w++) {
          // 原错误写法:sum += outputs[l-1][w];
          sum += weights[l][n][w] * outputs[l-1][w]; // 修复后:累加时乘对应权重
        }
        outputs[l][n] = transfer(sum);
      }
    return outputs[layers.size()-1];
}
验证建议
  • XOR任务可选择{2, 2, 1}的网络配置(2输入、2个隐藏层神经元、1输出),学习率设置为0.10.5,训练1万10万轮即可正常收敛。
  • 权重随机化范围建议选(-1, 1),避免初始值过大导致sigmoid函数进入饱和区影响训练效率。

内容的提问来源于stack exchange,提问作者Paweł Lis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:45:04