RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same
练过程中出现如题错误的解决方案
常规解决方案
从报错问题描述中可以找到错误原因
输入的数据类型为torch.cuda.FloatTensor,说明输入数据在GPU中
模型参数的数据类型为torch.FloatTensor,说明模型还在CPU
问题原因搞清楚了,模型没加载到CPU,在代码中加一行语句就可以了
model = model.cuda()
model = model.to('cuda')
model.cuda()
model.to('cuda')
上面四行任选一,还有其他未列出的表述方法,都可以将模型加载到GPU。
反之Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the问题来源是输入数据没有加载到GPU,解决方法为
tensor = tensor.cuda()
tensor = tensor.to('cuda')
任选任选~
但是要注意直接tensor.to('cuda')等方法不行,
原因:
Module.to() 是一个“in-place”方法,tensor.to() 函数不是。tensor.to() 这个函数功能是产生一个新的tensor,并不会改变原数据。
疑难杂症
有时已经写了将模型和输入数据加载到GPU的语句,但还是报了这个错误。
检查模型和输入加载位置
模型
print(next(model.parameters()).is_cuda)
输入数据
print(tensor.device)
模型深层问题
如果检查过模型加载位置,确实在GPU,依然报了如题所述错误,那就要去检查一下模型了。
自定义模型中我们会使用一系列继承了nn.Module类的自定义类,使用过程中可能加入了一些不被nn.Module认可的python表述,这些表述内部的层会被model.cuda()忽略。
例如笔者使用list包装了一些卷积层,模型加载到GPU时会被忽略。
备注:搭建网络时list的替代方案为nn.ModuleList()
发文目的:记录一下遇到的bug,避免再次落坑。解决该问题的过程中未发现从模型结构入手的解决方案,因此发布博文帮各位大佬踩坑。
(如果对您有帮助,厚着脸皮要个赞)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2019-02-24 mac 删除自带 ABC 输入法的方法
2019-02-24 Sublime Text 3 for Mac 3176 序号版