在python2中加载python3训练和保存的模型时出错:

ValueErrorTraceback (most recent call last)

--> 237 clf = joblib.load('clf300_all.model')

238 pred_y = clf.predict_proba(X)

/usr/local/anaconda2/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.pyc in load(filename, mmap_mode)

576 return load_compatibility(fobj)

577

--> 578 obj = _unpickle(fobj, filename, mmap_mode)

579

580 return obj

/usr/local/anaconda2/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.pyc in _unpickle(fobj, filename, mmap_mode)

ValueError: unsupported pickle protocol: 3

经过查阅资料:

跨python版本的 joblib.dump() 和 joblib.load()

Compatibility across python versions

Compatibility of joblib pickles across python versions is not fully supported. Note that, for a very restricted set of objects, this may appear to work when saving a pickle with python 2 and loading it with python 3 but relying on it is strongly discouraged.

If you are switching between python versions, you will need to save a different joblib pickle for each python version.

Here are a few examples or exceptions:

Saving joblib pickle with python 2, trying to load it with python 3:

Traceback (most recent call last): File "/home/lesteve/dev/joblib/joblib/numpy_pickle.py", line 453, in load obj = unpickler.load() File "/home/lesteve/miniconda3/lib/python3.4/pickle.py", line 1038, in load dispatch[key[0]](self) File "/home/lesteve/miniconda3/lib/python3.4/pickle.py", line 1176, in load_binstring self.append(self._decode_string(data)) File "/home/lesteve/miniconda3/lib/python3.4/pickle.py", line 1158, in _decode_string return value.decode(self.encoding, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 1024: ordinal not in range(128) Traceback (most recent call last): File "", line 1, in File "/home/lesteve/dev/joblib/joblib/numpy_pickle.py", line 462, in load raise new_exc ValueError: You may be trying to read with python 3 a joblib pickle generated with python 2. This is not feature supported by joblib.

Saving joblib pickle with python 3, trying to load it with python 2:

Traceback (most recent call last): File "", line 1, in File "joblib/numpy_pickle.py", line 453, in load obj = unpickler.load() File "/home/lesteve/miniconda3/envs/py27/lib/python2.7/pickle.py", line 858, in load dispatch[key](self) File "/home/lesteve/miniconda3/envs/py27/lib/python2.7/pickle.py", line 886, in load_proto raise ValueError, "unsupported pickle protocol: %d" % proto ValueError: unsupported pickle protocol: 3

=================================================================================================================================================

不完全支持跨python版本的joblib pickle的兼容性。请注意,对于一组非常有限的对象,当使用python 2保存pickle并使用python 3加载它时,这可能会起作用,但强烈建议不要依赖它。

如果要在python版本之间切换,则需要为每个python版本保存不同的joblib pickle。

==================================================================================================================================================

另外:不同python版本的pickle.dump()和pickle.load()是可以相互转换和支持的

You should write the pickled data with a lower protocol number in Python 3. Python 3 introduced a new protocol with the number 3 (and uses it as default), so switch back to a value of 2 which can be read by Python 2.

Check the protocolparameter in pickle.dump. Your resulting code will look like this.

pickle.dump(your_object,your_file,protocol=2)

There is no protocolparameter in pickle.load because pickle can determine the protocol from the file.

Pickle uses different protocols to convert your data to a binary stream.

In python 2 there are 3 different protocols (0, 1, 2) and the default is 0.

In python 3 there are 5 different protocols (0, 1, 2, 3, 4) and the default is 3.

You must specify in python 3 a protocol lower than 3 in order to be able to load the data in python 2. You can specify the protocol parameter when invoking pickle.dump.

python joblib.dump_python 2/3 joblib.dump() 和 joblib.load()相关推荐

  1. python 2/3 joblib.dump() 和 joblib.load()

    在python2中加载python3训练和保存的模型时出错:ValueErrorTraceback (most recent call last) --> 237 clf = joblib.lo ...

  2. linux服务器上import joblib报错 ImportError: No module named joblib

    目录 1.报错场景 2.解决办法 1.报错场景 我在windows上训练了一个机器学习模型,用joblib保存后上传到服务器上.在服务器上运行python脚本报错:ImportError: No mo ...

  3. python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()将字典转化为字符串 (2)json.load ...

  4. python json loads_python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)...

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...

  5. java yaml dump方法_yamlyaml.load与yaml.dump方法

    yaml.load与yaml.dump方法 该模块提供了一些方法,不过常用的方法只有两个yaml.load和yaml.dump ,以下是一个版本相关的yaml 格式文件[root@361way yam ...

  6. 机器学习算法------2.11 模型的保存和加载(joblib.dump()、joblib.load())

    #  模型保存 joblib.dump(estimator, "./data/test.pkl") # 模型加载 estimator = joblib.load("./d ...

  7. python json.load_python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)...

    原博文 2018-04-22 09:11 − JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.du ...

  8. Python中Pickle模块的dump()方法和load()方法

    Python中的Pickle模块实现了基本的数据序列与反序列化. 一.dump()方法 pickle.dump(obj, file, [,protocol]) 注释:序列化对象,将对象obj保存到文件 ...

  9. python基础学习(十六)——超详细!pickle模块的使用(pickle.dump()和pickle.load())

    python的pickle模块提供了一个简答的持久化功能,可以将对象以文件的形式存放在磁盘上. pickle模块实现了基本的数据序列化和反序列化 通过pickle模块的序列化操作pickle.dump ...

最新文章

  1. 分享一个PC端六格密码输入框写法
  2. linux内核的syslets补丁
  3. Quantile Regression,python
  4. mybaits六:参数处理
  5. android layout 对齐,安卓利用TableLayout实现控件列对齐
  6. 【opencv系列03】OpenCV4.X视频捕获与显示
  7. inotify 机制
  8. ssl1762-工厂的烦恼【图论,最短路变形(最长路)】
  9. pg数据库 设置不区分大小写_pg数据库表名、字段名大小写问题
  10. 用SegNet进行室内布局语义分割
  11. 关于keeplive
  12. 别让我们的幸福感受在别人眼中
  13. exposure x5胶片滤镜插件如何安装及使用下载技巧
  14. 变频器制动电阻的选择(如G120变频器报警F7901失速报警)
  15. JQuery验证手机号电话号码
  16. 安装arosics做自动几何校正
  17. jenkins教程(jenkins教程入门到精通)
  18. 移动硬盘插入电脑不显示的解决办法
  19. 滚动轴承退化趋势预测
  20. 变电站巡检机器人工作中有哪些常见问题?该如何解决

热门文章

  1. Cesium-加载3D飞机模型沿指定路线前进
  2. 机器学习实验之顾客购买服装的分析与预测
  3. 真·自行车!华为天才少年刚刚「发布」了一款无人驾驶自行车,网友:这TM不比特斯拉燃?...
  4. Win7发布后的web不能访问解决
  5. Verilog HDL设计数字跑表数码管显示
  6. python中碰撞的代码_python中的碰撞形状
  7. 基于卷积神经网络的谣言检测(刘政(未志华)-计算机应用2017)
  8. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计
  9. 實戰案例:微信支付篇 (1) 前言
  10. 利用javah生成java本地代码在c语言中的写法