ImportError:无法从“ sklearn.externals”导入名称“ joblib”

Praneeth赛

我正在尝试使用joblib从s3加载我保存的模型

import pandas as pd 
import numpy as np
import json
import subprocess
import sqlalchemy
from sklearn.externals import joblib

ENV = 'dev'
model_d2v = load_d2v('model_d2v_version_002', ENV)

def load_d2v(fname, env):
    model_name = fname
    if env == 'dev':
        try: 
            model=joblib.load(model_name)
        except:
            s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
            path = s3_base_path+'/'+model_name
            command = "aws s3 cp {} {}".format(path,model_name).split()
            print('loading...'+model_name)
            subprocess.call(command)
            model=joblib.load(model_name)
    else:
        s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
        path = s3_base_path+'/'+model_name
        command = "aws s3 cp {} {}".format(path,model_name).split()
        print('loading...'+model_name)
        subprocess.call(command)
        model=joblib.load(model_name)
    return model

但是我遇到了这个错误:

    from sklearn.externals import joblib
ImportError: cannot import name 'joblib' from 'sklearn.externals' (C:\Users\prane\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\externals\__init__.py)

然后我尝试通过直接安装joblib

import joblib

但这给了我这个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 8, in load_d2v_from_s3
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 585, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 504, in _unpickle
    obj = unpickler.load()
  File "/usr/lib64/python3.7/pickle.py", line 1088, in load
    dispatch[key[0]](self)
  File "/usr/lib64/python3.7/pickle.py", line 1376, in load_global
    klass = self.find_class(module, name)
  File "/usr/lib64/python3.7/pickle.py", line 1426, in find_class
    __import__(module, level=0)
ModuleNotFoundError: No module named 'sklearn.externals.joblib'

你能告诉我如何解决吗?提前致谢

五条魔

它看起来像现有的泡菜保存文件(model_d2v_version_002)编码在非标准位置的参考模块-一个joblib是在sklearn.externals.joblib而不是在顶层。

当前scikit-learn文档只谈论一个顶层joblib-例如,在3.4.1持久性例子-但是我确实看到了在别人引用别人的老问题到DeprecationWarningscikit-learn0.21版本有关的旧scikit.external.joblib变种消失:

Python37 \ lib \ site-packages \ sklearn \ externals \ joblib_init_.py:15:弃用警告:sklearn.externals.joblib在0.21中已弃用,在0.23中将被删除。请直接从joblib导入此功能,可以通过以下方式安装该功能:pip install joblib。如果在加载腌制模型时出现此警告,则可能需要使用scikit-learn 0.21+重新序列化那些模型。

“弃用”表示将某些内容标记为不值得依赖,因为它可能会在将来的版本中停止使用(通常,但并非总是如此,建议使用更新的相同方法来进行处理)。

我怀疑您的model_d2v_version_002文件是从的旧版本保存的scikit-learn,而您现在正在使用scikit-learn(aka sklearn)0.23+版本,该版本已完全删除了该sklearn.external.joblib版本。因此,您的文件无法直接或轻松地加载到当前环境中。

但是,对于DeprecationWarning,您可能可以暂时使用旧scikit-learn版本暂时以旧方式加载文件,然后以现在首选的方式重新保存。给定警告信息,这可能需要scikit-learn版本0.21.x或0.22.x,但是如果您确切地知道model_d2v_version_002文件是从哪个版本保存的,则尝试使用该版本。步骤大致为:

  • 与旧版本创建临时工作环境(或回滚您当前的工作环境) sklearn

  • 导入类似的东西:

import sklearn.external.joblib as extjoblib
import joblib
  • extjoblib.load()您的旧文件已按您的计划进行,但是随后立即joblib.dump()使用top级别重新命名该文件joblib(为了以防万一,您可能想使用不同的名称来保留较旧的文件。)

  • 移动/更新到真实,现代的环境,并且只能使用import joblib(顶层)joblib.load()-在代码或存储的pickle文件中不再有对“ sklearn.external.joblib”的引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python导入错误:无法从“ sklearn.externals”导入名称“ six”

ImportError:无法从“sklearn.utils.fixes”导入名称“_argmax”

被阻止-ImportError:无法从'sklearn'导入名称'cross_validation'

sklearn ImportError:无法导入名称plot_roc_curve

ImportError:无法从“ sklearn.base”导入名称“ _UnstableArchMixin”

ImportError:无法从“ sklearn.tree”导入名称“ plot_tree”

ImportError:无法从“ sklearn.gaussian_process”导入名称“ GaussianProcess”

从sklearn导入时出现ImportError:无法导入名称check_build

从sklearn导入时出现ImportError:无法导入名称check_build

ImportError:导入sklearn.model_selection时无法导入名称'logsumexp'

sklearn导入错误:无法导入名称tfidfvectorizer

Google Colab ModuleNotFoundError:沒有名為“sklearn.externals.joblib”的模塊

ImportError:无法导入名称

ImportError:无法导入名称

从sklearn导入指标时ImportError

无法导入sklearn

ImportError:无法导入名称NullHandler

ImportError:无法导入名称“ IsolationForest”

ImportError:无法导入名称换行

ImportError:无法导入名称模式

ImportError:无法导入名称PunktWordTokenizer

ImportError:无法导入名称“ DjangoFilterBackend”

ImportError:无法导入名称“ SafeUnicode”

ImportError:无法导入名称ExponentialSmoothing

ImportError:无法导入名称pygtkcompat

ImportError:无法导入名称cbook

ImportError:无法导入名称getoutput

ImportError:无法导入名称“阶乘”

ImportError:无法导入名称包