pytorch踩坑记

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: 。。。。。
modoul
告诉我没有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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值