Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python3读取ckpt文件,同时使用python2?;_Python_Pytorch - Fatal编程技术网

如何使用python3读取ckpt文件,同时使用python2?;

如何使用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

我尝试用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之间的
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
不起作用。它只生成一个整数。你能提供你正在保存的模型的代码以及如何保存它吗?我很难调试一些我无法复制的东西