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

PyTorch实现求解XOR问题的MLP出现预测错误,请问原因是什么?

问题原因分析

你当前得到错误预测结果的核心原因是 forward前向传播逻辑写错了:你计算完第一层的ReLU激活值后,没有将激活后的结果传入第二层全连接层fc2,而是直接把第一层未经过激活的原始输出喂给了fc2,完全没有用到你定义的ReLU激活函数。


现有代码的输出推导

我们可以手动计算现有代码的计算逻辑,就能完全匹配你得到的输出结果:

  1. 第一层全连接fc1的权重为[[1,1],[1,1]],偏置为[0,-1],对于任意输入[x1, x2],fc1的输出为:
node1 = 1*x1 + 1*x2 + 0 = x1 + x2
node2 = 1*x1 + 1*x2 + (-1) = x1 + x2 -1
  1. 你没有对上面的结果做ReLU激活,直接传入第二层fc2,fc2的权重为[1,-2],偏置为0,最终输出为:
output = 1*node1 + (-2)*node2 = (x1+x2) - 2*(x1+x2 -1) = 2 - (x1 + x2)
  1. 代入四个测试输入计算结果和你给出的输出完全一致:
  • 输入[1,1]:2 - 2 = 0
  • 输入[0,0]:2 - 0 = 2
  • 输入[1,0]:2 - 1 = 1
  • 输入[0,1]:2 - 1 = 1

修复方法

只需要修改forward方法中fc2的输入为ReLU激活后的结果即可:

def forward(self, data):
    fc1 = self.fc1(data)
    activated = self.activation(fc1)
    # 把fc2的输入从fc1改成activated
    fc2 = self.fc2(activated)
    return fc2

修复后运行测试代码,得到的输出就是XOR的正确结果:

tensor([[0.],
        [0.],
        [1.],
        [1.]], grad_fn=<AddmmBackward>)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:18:03