如何使用python3读取ckpt文件,同时使用python2?;
我尝试用pyTorch读取检查点文件如何使用python3读取ckpt文件,同时使用python2?;,python,pytorch,Python,Pytorch,我尝试用pyTorch读取检查点文件 checkpoint = torch.load(xxx.ckpt) 该文件由使用python 2.7编写的程序生成。我尝试使用Python3.6读取该文件,但出现以下错误 UnicodeDecodeError: 'ascii' codec can't decode byte 0x8c in position 16: ordinal not in range(128) 可以在不降级python的情况下读取文件吗?在python 2.x和python 3.x
checkpoint = torch.load(xxx.ckpt)
该文件由使用python 2.7编写的程序生成。我尝试使用Python3.6读取该文件,但出现以下错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8c in position 16: ordinal not in range(128)
可以在不降级python的情况下读取文件吗?在python 2.x和python 3.x之间的
pickle中存在一些兼容性问题,因为迁移到unicode,您可能正在将字符串保存为模型的一部分,这就是为什么会看到该错误
您可以按照建议的方式在Pytorch中保存模型,并执行以下操作:
torch.save(filename, model.state_dict())
而不是保存模型
。然后在Python3中:
model = Model() # construct a new model
model.load_state_dict(torch.load(filename))
另一种方法是在Python2中取消勾选并将其保存为另一种更易于在Python2和Python3之间传输的格式。例如,您可以使用Pytorch Numpy桥保存体系结构的张量,并使用np.savez
您还可以尝试使用pickle
而不是torch.load
和在Python2.x和Python3.x之间的pickle
中存在一些兼容性问题,因为迁移到unicode,您可能正在将字符串保存为模型的一部分,这就是您看到该错误的原因
您可以按照建议的方式在Pytorch中保存模型,并执行以下操作:
torch.save(filename, model.state_dict())
而不是保存模型
。然后在Python3中:
model = Model() # construct a new model
model.load_state_dict(torch.load(filename))
另一种方法是在Python2中取消勾选并将其保存为另一种更易于在Python2和Python3之间传输的格式。例如,您可以使用Pytorch Numpy桥保存体系结构的张量,并使用np.savez
您也可以尝试使用pickle
而不是torch.load
和最终我通过
1) 使用anaconda创建python2环境
2) 使用pytorch
读取检查点文件,然后使用pickle
checkpoint = torch.load("xxx.ckpt")
with open("xxx.pkl", "wb") as outfile:
pickle.dump(checkpointfile, outfile)
3) 回到python3环境,使用pickle
读取文件,使用pytorch
pkl_file = open("xxx.pkl", "rb")
data = pickle.load(pkl_file, encoding="latin1")
torch.save(data, "xxx.ckpt")
最终,我解决了这个问题
1) 使用anaconda创建python2环境
2) 使用pytorch
读取检查点文件,然后使用pickle
checkpoint = torch.load("xxx.ckpt")
with open("xxx.pkl", "wb") as outfile:
pickle.dump(checkpointfile, outfile)
3) 回到python3环境,使用pickle
读取文件,使用pytorch
pkl_file = open("xxx.pkl", "rb")
data = pickle.load(pkl_file, encoding="latin1")
torch.save(data, "xxx.ckpt")
嗯,pickle
不起作用。它只生成一个整数。你能提供你正在保存的模型的代码以及如何保存它吗?我很难调试一些我无法复制的东西。Well,pickle
不起作用。它只生成一个整数。你能提供你正在保存的模型的代码以及如何保存它吗?我很难调试一些我无法复制的东西