PyTorch运行报addmm错误:CPU张量期望在GPU上该如何解决
问题排查与解决方案
核心报错原因
PyTorch中张量的.to()方法不是原地操作,不会修改原张量,只会返回移动到目标设备的新张量。你代码中test函数内的test_data.to(device)没有接收返回值,执行后test_data仍然留在CPU上,而你的模型已经提前移动到GPU,前向传播时模型参数和输入张量设备不匹配,触发了设备不匹配的报错。
修复方法
将test函数内的对应行修改为:
test_data = test_data.to(device)
同时可以优化训练阶段的target构造逻辑,避免多余的设备迁移操作,将训练阶段的target构造代码:
target = torch.Tensor(target) target = target.to(device)
替换为:
target = torch.tensor([target], device=device)
显式指定张量形状与设备,避免广播过程中出现隐性问题。
其他可优化点
- 当前训练每轮仅输入1个样本,batch size为1,模型收敛速度极慢,建议改为批量生成数据(如一次生成1024个样本)同时训练,收敛效率会大幅提升。
- 仅100轮训练迭代次数不足,该任务建议至少训练5000轮以上才能得到可用的预测精度。
- 你当前选择的SGD学习率0.1偏大,可调整为0.01减少训练过程中的损失抖动。
内容的提问来源于stack exchange,提问作者Laurids
相关产品推荐
相关产品推荐

