GPU已识别但Torch模型无法运行:输入与权重设备不匹配报错
问题分析与解决
错误根源
这个错误的核心是输入张量在CPU上,而模型权重在GPU上,两者设备不匹配。你代码里的关键问题是:PyTorch的to()方法是返回一个新的张量对象,不会原地修改原张量,你调用expanded_tensor.to(self.device)后没有把返回值赋值给原变量,导致输入还是停留在CPU上。
具体修复步骤
修正输入张量的设备转移
在preprocess_image方法中,把这一行:expanded_tensor.to(self.device)修改为:
expanded_tensor = expanded_tensor.to(self.device)这样才会真正把输入张量转移到指定的GPU设备上。
可选:验证模型与张量的设备一致性
可以在startup_model方法末尾添加一行代码,确认模型权重确实在GPU上:print("模型权重设备:", next(self.classifier.parameters()).device)在
preprocess_image中添加一行确认输入张量设备:print("输入张量设备:", expanded_tensor.device)确保两者输出都是
cuda:0。清理冗余代码
你代码里的interpolated_image = self.provided_image.resize((w, h), Image.BILINEAR)完全冗余,因为w,h就是原图的尺寸,resize成一样的没有意义,可以直接删除这一行,用原图处理即可。
额外检查点
- 确认
startup_model方法已经被正确调用,否则模型不会被转移到GPU上。 - 权重加载部分
load('path/to/my/models/79999_iter.pth', device('cuda:0'))已经指定了GPU设备,这部分没问题,但要确保权重文件路径正确。
内容的提问来源于stack exchange,提问作者cudnn_account
相关产品推荐
相关产品推荐

