首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能加载我的模型,因为我不能放置一个PosixPath

我不能加载我的模型,因为我不能放置一个PosixPath
EN

Stack Overflow用户
提问于 2019-07-31 08:33:10
回答 7查看 9K关注 0票数 10

我正在设置一个脚本,我需要使用fast-ai包中的一些函数。事实上,我在Windows上,当我定义路径时,fast-ai名为load_learner的函数无法加载模型。

我尝试将该函数转换为包,如下所示:

state = pickle.load(open(str(path) + '/' + str(fname), 'rb'))

而不是:

state = pickle.load(open(path/fname, 'rb'))

但是我得到了这个错误:

代码语言:javascript
复制
 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

我的路径被定义为:

代码语言:javascript
复制
folder_path = './models/model1'
fname = 'model.pkl'

我将函数调用为:model = load_learner(folder_path, fname)

如何在此函数中使用Windows路径?

更新1

发布的答案只有在Linux上才是正确的。我在Windows上仍然有问题。我没有找到在Windows上通过PosixPath的方法。我找到的唯一解决方案是从我的模块中更改内部包,但这不是解决此类问题的安全方法。

提前谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2020-10-04 21:50:37

只需将PosixPath重定向到WindowsPath

代码语言:javascript
复制
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath

我也是加载fastai模型和这个技巧工作。

票数 19
EN

Stack Overflow用户

发布于 2019-07-31 13:34:47

根据我自己的问题,我找到了一种方法:

代码语言:javascript
复制
from pathlib import Path

folder_path = Path('./models/model1')

更新1

这个解决方案只在Linux上工作,在Windows上我仍然有一个错误。

票数 3
EN

Stack Overflow用户

发布于 2019-07-31 11:30:05

根据提供的错误消息,您正在使用pathlib。所以您不需要在这里使用+ '/' +str(path) + '/' + str(fname)

/作为路径分隔符在Linux/Unix上工作:

代码语言:javascript
复制
state = pickle.load(open(path / fname, 'rb'))

在Windows上使用.joinpath()代替:

代码语言:javascript
复制
state = pickle.load(open(path.joinpath(fname), 'rb'))

如果不使用pathlib,请使用os.path.join()。它将自动为您的操作系统选择正确的格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57286486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档