Python sci工具包优化中的保存和加载模型

Python sci工具包优化中的保存和加载模型,python,scikit-learn,load,bayesian,hyperparameters,Python,Scikit Learn,Load,Bayesian,Hyperparameters,我在skopt包中使用了带有gp_最小化的贝叶斯优化和带有伪_最小化的随机搜索 我想通过scikit opt中的加载选项保存这两个模型: skopt.dump(gp_100,'gp_100.pkl') 据我所知,应该可以使用以下行加载模型: gp_100=skopt.load('gp_100.pkl') 不幸的是,这会引发一个错误: <ipython-input-18-a24ad5907175> in <module> 1 from skopt import

我在skopt包中使用了带有gp_最小化的贝叶斯优化和带有伪_最小化的随机搜索

我想通过scikit opt中的加载选项保存这两个模型:

skopt.dump(gp_100,'gp_100.pkl')

据我所知,应该可以使用以下行加载模型:

gp_100=skopt.load('gp_100.pkl')

不幸的是,这会引发一个错误:

<ipython-input-18-a24ad5907175> in <module>
      1 from skopt import load
----> 2 gpall_1000 = skopt.load('gp_100.pkl')

/opt/conda/lib/python3.7/site-packages/skopt/utils.py in load(filename, **kwargs)
    170         Reconstructed OptimizeResult instance.
    171     """
--> 172     return load_(filename, **kwargs)
    173 
    174 

/opt/conda/lib/python3.7/site-packages/joblib/numpy_pickle.py in load(filename, mmap_mode)
    603                     return load_compatibility(fobj)
    604 
--> 605                 obj = _unpickle(fobj, filename, mmap_mode)
    606 
    607     return obj

/opt/conda/lib/python3.7/site-packages/joblib/numpy_pickle.py in _unpickle(fobj, filename, mmap_mode)
    527     obj = None
    528     try:
--> 529         obj = unpickler.load()
    530         if unpickler.compat_mode:
    531             warnings.warn("The file '%s' has been generated with a "

/opt/conda/lib/python3.7/pickle.py in load(self)
   1083                     raise EOFError
   1084                 assert isinstance(key, bytes_types)
-> 1085                 dispatch[key[0]](self)
   1086         except _Stop as stopinst:
   1087             return stopinst.value

/opt/conda/lib/python3.7/pickle.py in load_global(self)
   1371         module = self.readline()[:-1].decode("utf-8")
   1372         name = self.readline()[:-1].decode("utf-8")
-> 1373         klass = self.find_class(module, name)
   1374         self.append(klass)
   1375     dispatch[GLOBAL[0]] = load_global

/opt/conda/lib/python3.7/pickle.py in find_class(self, module, name)
   1425             return _getattribute(sys.modules[module], name)[0]
   1426         else:
-> 1427             return getattr(sys.modules[module], name)
   1428 
   1429     def load_reduce(self):

AttributeError: module '__main__' has no attribute 'objective'
in
1来自skopt导入加载
---->2 gpall_1000=skopt.load('gp_100.pkl'))
/加载中的opt/conda/lib/python3.7/site-packages/skopt/utils.py(文件名,**kwargs)
170个结果实例。
171     """
-->172返回加载(文件名,**kwargs)
173
174
/加载中的opt/conda/lib/python3.7/site-packages/joblb/numpy\u pickle.py(文件名,mmap\u模式)
603返回负载兼容性(fobj)
604
-->605 obj=_unpickle(fobj,文件名,mmap_模式)
606
607返回obj
/opt/conda/lib/python3.7/site-packages/joblb/numpy_pickle.py in_unpickle(fobj,文件名,mmap_模式)
527 obj=无
528试试:
-->529 obj=unpickler.load()
530如果取消pickler.compat_模式:
531 warnings.warn(“文件“%s”已生成,带有”
/加载中的opt/conda/lib/python3.7/pickle.py(自)
1083提高采收率
1084 assert isinstance(键、字节和类型)
->1085调度[键[0]](自)
1086除停止为停止外:
1087返回停止指示值
/load_global(self)中的opt/conda/lib/python3.7/pickle.py
1371 module=self.readline()[:-1]。解码(“utf-8”)
1372 name=self.readline()[:-1]。解码(“utf-8”)
->1373 klass=self.find_类(模块,名称)
1374自我附加(klass)
1375调度[全局[0]]=加载\u全局
/find_类中的opt/conda/lib/python3.7/pickle.py(self、module、name)
1425返回_getattribute(系统模块[module],名称)[0]
1426其他:
->1427返回getattr(系统模块[模块],名称)
1428
1429 def负载减少(自):
AttributeError:模块“\uuuu main\uuuuuu”没有属性“objective”
如何正确加载这些模型

我想加载它们并通过plot_收敛来绘制两者

提前谢谢你


在调用load之前,您需要导入所有库和其他类定义,这些库和类定义是在被pickle的模型中使用的


例如,如果在调用dump的同一个函数中调用load(在转储之后),您可能不会收到此错误,因为库已加载。因此,它可以识别加载的对象中的属性。

在调用load之前,您需要导入所有库以及在已pickle的模型中使用的其他类定义


例如,如果在调用dump的同一个函数中调用load(在转储之后),可能不会出现此错误,因为库已加载。因此,它可以识别加载对象中的属性。

这是否回答了您的问题?调用load时,是否加载了在被pickle的模型中使用的所有库和其他类定义?是否可以在同一个函数中调用load在您调用转储时(转储之后),但此错误仍然存在?@MaMaG我刚刚遇到了相同的问题,您的解决方案成功了。您能否将其添加为一个答案,以使其更具可见性?这是否回答了您的问题?当您调用load时,是否加载了在被pickle的模型中使用的所有库和其他类定义?您能否在同一个f中调用load你调用dump的函数(在dump之后),这个错误仍然发生?@MaMaG我刚刚遇到了同样的问题,你的解决方案成功了。你能把它添加为一个答案,这样它就更容易被发现吗?