1、关于cpu cuda
Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same
英语4级425分的我一看就懂了,数据和模型没在一个地儿呗,
模型在cuda上,但是数据在cpu上,所以要移动一下
data.to(torch.device('cuda'))
然后。。。。
Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same
不明所以了半天,终于想到了是不是有返回值的啊
data = data.to(torch.device('cuda'))
嗷嗷嗷,对了,我真聪明~
(另外如果是模型的话 不需要再赋值一次,属于inplace方法,话说为啥不统一下嘞,大佬的想法不太懂)
2、保存模型、加载模型
最近遇到一个很刚的问题
保存的模型居然!加载不了!
第一次报错
RuntimeError: Error(s) in loading state_dict for AgingModule:
Missing key(s) in state_dict: 。。。。。
告诉我没有keys???这不是逗的吗,我刚生成,马上加载居然都出错~
net = torch.load('model.pth')
print(net.keys())
咦!还真不一样,每个层前面都多了一个 “module.”
知道问题,解决还不简单~
# generator 模型结构文件
# model.pth 训练好的模型文件
gnrt = torch.load('model.pth')
for i in generator.state_dict().keys():
generator.state_dict()[i] = gnrt['module.'+i]
3 还是保存加载模型!
这次下载了别人的模型,保存了居然还是加载不上!!!气煞我也
报错如下:
storage = zip_file.get_storage_from_record(name, size, dtype).storage()
RuntimeError: [enforce fail at inline_container.cc:222] . file not found: archive/data/2737298512
emmm, 好吧,我摊牌了,我没思路,还是问度娘吧!~
然后在 :https://blog.csdn.net/zkp_987/article/details/114535859
找到一个说法:版本不一样????我在同一个机器上保存加载还能不一样???
然后查看高版本和低版本加载的文章里找了个解决办法
https://junchu.blog.csdn.net/article/details/110955978
anyway 试试再说
其实就是在保存的时候加上 _use_new_zipfile_serialization=False
torch.save(model_.state_dict(), 'model_best_bacc.pth.tar', _use_new_zipfile_serialization=False)
然后! 我靠,还真行了????!!!!! pytorch你是搞哪样~
3 还是保存加载模型!!!
还是上面的问题,这次报错换了~
File “D:\。。。。\serialization.py”, line 779, in _legacy_load
deserialized_objects[key]._set_from_file(f, offset, f_should_read_directly)
RuntimeError: storage has wrong size: expected 819 got 1
根据测试最后 expected 的维度有可能是爆掉的,比如-4956354132167 啥的都是可能出现的。
尝试了好几遍,度娘也问过了~这次度娘没理我,莫法,砖还是要搬的。。。既然torch自己给的不能用,只能自己写了呗。。万能的pickle,该你上场了
def save_mod(self):
with open('net.pkl','wb') as f:
pickle.dump(self.net.state_dict(),f)
def load_mod(self):
with open('net.pkl','rb') as f:
net_state_dict = pickle.load(f)
self.net.load_state_dict(net_state_dict)