我正在设置一个脚本,我需要使用fast-ai包中的一些函数。事实上,我在Windows上,当我定义路径时,fast-ai名为load_learner的函数无法加载模型。
我尝试将该函数转换为包,如下所示:
state = pickle.load(open(str(path) + '/' + str(fname), 'rb'))
而不是:
state = pickle.load(open(path/fname, 'rb'))
但是我得到了这个错误:
File "lib\site-packages\fastai\basic_train.py", line 462, in load_learner
state = pickle.load(open(path/fname, 'rb'))
File "\lib\pathlib.py", line 1006, in __new__
% (cls.__name__,))
NotImplementedError: cannot instantiate 'PosixPath' on your system我的路径被定义为:
folder_path = './models/model1'
fname = 'model.pkl'我将函数调用为:model = load_learner(folder_path, fname)
如何在此函数中使用Windows路径?
更新1
发布的答案只有在Linux上才是正确的。我在Windows上仍然有问题。我没有找到在Windows上通过PosixPath的方法。我找到的唯一解决方案是从我的模块中更改内部包,但这不是解决此类问题的安全方法。
提前谢谢。
发布于 2020-10-04 21:50:37
只需将PosixPath重定向到WindowsPath。
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath我也是加载fastai模型和这个技巧工作。
发布于 2019-07-31 13:34:47
根据我自己的问题,我找到了一种方法:
from pathlib import Path
folder_path = Path('./models/model1')更新1
这个解决方案只在Linux上工作,在Windows上我仍然有一个错误。
发布于 2019-07-31 11:30:05
根据提供的错误消息,您正在使用pathlib。所以您不需要在这里使用+ '/' +:str(path) + '/' + str(fname)
/作为路径分隔符在Linux/Unix上工作:
state = pickle.load(open(path / fname, 'rb'))在Windows上使用.joinpath()代替:
state = pickle.load(open(path.joinpath(fname), 'rb'))如果不使用pathlib,请使用os.path.join()。它将自动为您的操作系统选择正确的格式。
https://stackoverflow.com/questions/57286486
复制相似问题