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

Macbook M1使用MPS运行PyTorch MNIST CNN模型准确率为0%求助

M1 Mac用PyTorch MPS训练MNIST测试准确率0%的原因及解决办法
  • 测试数据未同步到MPS设备:这是最常见的原因。训练时你把模型和训练数据都移到了MPS,但测试环节如果没把测试集的data和target也转到MPS上,模型在MPS上运算、数据却在CPU,两者不匹配会导致输出完全错误,直接出现0%准确率。检查官方示例的测试循环代码,必须确保每个batch的data和target都执行.to(device)操作,和训练时的处理逻辑一致。

  • PyTorch MPS版本兼容性问题:早期PyTorch对M1的MPS后端支持存在一些bug,部分运算逻辑的表现和CPU不一致。如果确认测试数据已经正确转到MPS,建议升级到最新稳定版的PyTorch,新版本修复了大量MPS相关的兼容性问题。

  • 模型设备状态异常:极少数情况下,训练后模型参数可能意外被移回CPU(比如某些操作无意识地把模型拉回CPU),不过这种情况训练时的loss不会正常下降,可能性较低。可以在测试前打印next(model.parameters()).device,确认模型仍处于MPS设备上。

快速修复示例

修改官方代码的测试函数,确保测试数据也送入MPS:

def test(model, device, test_loader):
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            # 关键:将测试数据转移到指定设备(MPS)
            data, target = data.to(device), target.to(device)
            output = model(data)
            test_loss += F.nll_loss(output, target, reduction='sum').item()
            pred = output.argmax(dim=1, keepdim=True)
            correct += pred.eq(target.view_as(pred)).sum().item()
    # 后续统计代码不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:23