- torch.load加载模型报错 :
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1124: ordinal not in range(128)
原因是:Pytorch在加载模型时候,如果训练保存模型的python环境是2.7,然而在python3的环境中去load模型,就会出现上面的错误。
解决办法:
ascii codec cant decode byte 0xc3 ..._人工智能_zhucuankuan2669的博客-CSDN博客blog.csdn.netfrom functools import partial
import pickle
pickle.load = partial(pickle.load, encoding="latin1")
pickle.Unpickler = partial(pickle.Unpickler, encoding="latin1")
model = torch.load(model_file, map_location=lambda storage, loc: storage, pickle_module=pickle)
加入上面这些代码即可,一招制敌!太感谢了!!!!
另外:有的人使用 cPickle.load()加载模型,也会报这个错误,原因也是python2,python3版本问题。
解决方法:
ascii codec cant decode byte 0x90 in position 614: ordinal not in_Python_一个处女座的程序猿-CSDN博客blog.csdn.net将 training_data, validation_data, test_data = cPickle.load(f)
改为即可,training_data, validation_data, test_data = cPickle.load(f,encoding='bytes')
加上encoding='bytes'就行了
2.RuntimeError: Expected a Tensor of type torch.cuda.FloatTensor but found a type torch.FloatTensor for s
需要传入一个cuda类型数据,但是实际传入的却不是cuda类型。
RuntimeError: Expected object of type torch.cuda.FloatTensor but found type torch.FloatTensor for arblog.csdn.net意思是要求的目标类型是torch.cuda.FloatTensor,但是找到的数据类型是torch.FloatTensor,所以需要在数据类型后面加上.cuda()。将predict = model(Variable(x_train)) 改为predict = model(Variable(x_train.cuda()))
但是,我加上.cuda()依然报这个错,怎么办呢?就把传入的数据的.cuda()删掉就好了。因为这个参数之前加了.cuda(),可能检测到这一点,所以需要传入cuda类型,但不知道为什么它实际上不是cuda类型,所以把之前的.cuda()删了就不报错了,但是可能也慢了……但是主要不是为了不报错嘛,哈哈
后面我发现我在变量后面直接加 .cuda() —> var.cuda(),是没用的,但是
var = var.cuda() ,却可以!不知道为什么,可能我漏掉了什么细节吧