【问题标题】:ValueError: negative dimensions are not allowed when loading .pkl fileValueError:加载 .pkl 文件时不允许负尺寸
【发布时间】:2020-01-18 00:53:52
【问题描述】:

虽然有很多关于错误ValueError: negative dimensions are not allowed的问题线程 我找不到问题的答案

使用 SGDclassifer 训练机器学习模型后

clf=linear_model.SGDClassifier(loss='log',random_state=20000,verbose=1,class_weight='balanced')
model=clf.fit(X,Y)

X 的维度是 (1651880,246177)

以下代码正在运行,即保存模型对象和使用模型进行预测时

joblib.dump(model, 'trainedmodel.pkl',compress=3)

prediction_result=model.predict(x_test)

但加载保存的模型时出错

model = joblib.load('trainedmodel.pkl')

下面是错误信息 请帮我解决它。

  File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 598, in load
    obj = _unpickle(fobj, filename, mmap_mode)

  File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 526, in _unpickle
    obj = unpickler.load()

  File "C:\Users\Taxonomy\Anaconda3\lib\pickle.py", line 1050, in load
    dispatch[key[0]](self)

  File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 352, in load_build
    self.stack.append(array_wrapper.read(self))

  File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 195, in read
    array = self.read_array(unpickler)

  File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 141, in read_array
    array = unpickler.np.empty(count, dtype=self.dtype)

ValueError: negative dimensions are not allowed

【问题讨论】:

  • 如果减少训练数据的大小会发生什么? (1651880,246177) 看起来很大,如果这会导致问题?
  • 我已经从 5300000 减少到 1651880 我无法进一步减少它。我的服务器 RAM 大小为 128GB。我认为应该处理大小
  • 我认为您在使用压缩时遇到了 int 溢出。可能是 zlib 问题。你可以试试不压缩吗? (我可以想象腌制文件的巨大尺寸)。尝试将sklearn升级到最新版本,可能问题已解决。
  • @amine 即使没有压缩,我也会遇到同样的错误。我还检查了将 sckit-learn 升级到 0.21.3。无法解决问题
  • 我认为这是因为高度稀疏的矩阵。 ' 类型的稀疏矩阵,以压缩稀疏行格式存储 10842461 个元素>

标签: python-3.x scikit-learn pickle joblib


【解决方案1】:

尝试使用协议 4 转储模型。

来自python的泡菜docs

在 Python 3.4 中添加了协议版本 4。它增加了对非常 大对象,酸洗更多种类的对象,以及一些数据格式 优化。有关改进的信息,请参阅 PEP 3154 由协议 4 带来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2023-02-26
    • 2020-10-08
    • 2016-04-25
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多