python 2/3 joblib.dump() 和 joblib.load()
在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 "<string>", line 1, in <module>
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 "<string>", line 1, in <module>
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 of2which can be read by Python 2.Check the
protocolparameter inpickle.dump. Your resulting code will look like this.pickle.dump(your_object, your_file, protocol=2)There is no
protocolparameter inpickle.loadbecausepicklecan determine the protocol from the file.Pickle uses different
protocolsto convert your data to a binary stream.
In python 2 there are 3 different protocols (
0,1,2) and the default is0.In python 3 there are 5 different protocols (
0,1,2,3,4) and the default is3.You must specify in python 3 a protocol lower than
3in order to be able to load the data in python 2. You can specify theprotocolparameter when invokingpickle.dump.
python 2/3 joblib.dump() 和 joblib.load()的更多相关文章
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- 【Python基础】json.dumps()和json.loads()、json.dump()和json.load()的区分
json文件处理涉及的四个函数json.dumps()和json.loads().json.dump()和json.load()的区分 一.概念理解 1.json.dumps()和json.loads ...
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- python---json.dumps 与 json.loads /json.dump 和json.load区别
json.dumps 是将python的数据类型进行json的编码,生成json格式的数据,举例json_data = json.dumps(str) str为python的字符串类型数据,生成的j ...
- json.dump()和json.load()
import json,time # save data to json file def store(data): with open('data.json', 'w') as fw: # 将字典转 ...
- 终于解决了python 3.x import cv2 “ImportError: DLL load failed: 找不到指定的模块” 及“pycharm关于cv2没有代码提示”的问题
终于解决了python 3.x import cv2 “ImportError: DLL load failed: 找不到指定的模块” 及“pycharm关于cv2没有代码提示”的问题 参考 :h ...
- json模块:json.dumps()、json.loads()、json.dump()、json.load()
json.dumps().json.loads().json.dump().json.load() 4个方法的总结和使用: 注意:存在文件里面的东西,读出来都是字符串 import json 1.js ...
- Python中Pickle模块的dump()方法和load()方法
Python中的Pickle模块实现了基本的数据序列与反序列化. 经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就 ...
- python采用json.dump和json.load存储数据
#!/usr/bin/python # -*- coding: UTF-8 -*- import json numbers = [2,3,4,7,11,13] filename = 'numbers. ...
随机推荐
- 关于DIV多层嵌套的margin-top的BUG
今天在做登录页面的时候发现个margin-top的bug ; 初始代码如下: html: <div class="logo"></div> <div ...
- 要使用C#实现一个ActiveX控件
要使用C#实现一个ActiveX控件,需要解决三个问题: 1.使.NET组件能够被COM调用 2.在客户机上注册后,ActiveX控件能通过IE的安全认证 3.未在客户机上注册时,安装包能通过IE的签 ...
- Android PopupWindow做的分享界面
package com.tq.mbaexam.view; import java.util.ArrayList; import java.util.LinkedHashMap; import java ...
- 重新总结flex布局(flex,flex-direction,justify-content,align-items,flex-wrap,align-self)
1.flex,主要就是按比例分配.(例如:两个div的flex:1,就大小相等) .box1{ flex:1; background-color: red; } .box2{ flex:1; back ...
- OpenShift和F5的集成手册
OpenShift和F5的集成步骤,记录如下,如实际操作中有变更会再度编辑修改. 1.整体架构 使用BIG-IP作为Openshift的Router,能实现以下功能: 为Services创建BIG-I ...
- LTE试题
D 如果出现eNB的告警1018007“小区退服,光口不可用”,不可能是以下哪种原因造成的?( ) 基带板上Ir接口光模块损坏 基带板上Ir接口光模块被拔出 基带板上Ir接口光模块型 ...
- IIS7的CMD指令
AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 使用命令行管理IIS 7.0时,需要使用IIS7.0提供的全新管理工具AppCmd.exe.AppC ...
- c++ 读写Excel及数据导入SQLServer
c++ 读写Excel及数据导入SQLServer C++操作Excel ,网上的资料还是比较多的,写这篇文章也是分享给初学者一些经验. 本人 觉得CSpreadShe ...
- exchange 升级顺序导致的邮件被发不出的问题?
最近在做一个项目POC,准备升级过程目前的2007 环境到exchange 2010,由于客户环境是exchange 2007 sp1 不满足升级的基本条件,我们必须将exchange 2007 sp ...
- 如何在Windows Server 2012 R2上安装SharePoint 2013
笔者原以为是个挺容易个事儿, 毕竟是微软自家的产品安装在自家的操作系统上, 没想到还是让我费了半天劲. 写在这里吧, 方便其他的朋友. 具体步骤 ======================= ...