在Linux环境下训练好了模型,再使用Windows系统加载模型使用报错,原来是使用了PosixPath这个高级库。
由于 Windows 操作系统 和 Linux 操作系统 文件系统设计存差异。路径字符串的表示方法有所不同,例如Linux 使用 “ / ” 分隔符而 Windows 使用 “ \ ”,根目录表示方式也不同。因此针对两套系统创建了WindowsPath类 和 PosixPath类。
在 Windows 操作系统下,默认创建的 Path 对象是 WindowsPath 对象,其余Linux,unix 等满足 POSIX规范的操作系统都将被创建为 PosixPath 对象。
在Windows系统中使用pathlib库加载PyTorch训练好的模型时遇到PosixPath错误。博主通过修改pathlib.py源码,将PosixPath替换为WindowsPath以解决不兼容问题,确保模型在Windows环境下正常实例化。
windows环境下使用pathlib库加载pytorch训练好的模型出现不能实例化PosixPath错误。
在pathlib.py文件的1081行做如下修改:
def __new__(cls, *args, **kwargs):
# 源码
# if cls is Path:
# cls = WindowsPath if os.name == 'nt' else PosixPath
# self = cls._from_parts(args, init=False)
# if not self._flavour.is_supported:
# raise NotImplementedError("cannot instantiate %r on your system"
# % (cls.__name__,))
# self._init()
# return self
# 修改
if cls is Path:
# cls = WindowsPath if os.name == 'nt' else PosixPath
cls = WindowsPath
self = cls._from_parts(args, init=False)
# Windows doesn't support PosixPath
if type(self) == PosixPath:
cls = WindowsPath
self = cls._from_parts(args, init=False)
if not self._flavour.is_supported:
raise NotImplementedError("cannot instantiate %r on your system"
% (cls.__name__,))
self._init()
return self
其中上方注释部分为源码,下方的代码为修改代码。