我正在尝试使用包含CIFAR-10数据集的针对python的特殊版本。
它是一组二进制文件,每个文件表示10k numpy矩阵的字典。这些文件显然是由python2 cPickle
创建的。
我尝试从python2加载它,如下所示:
import cPickle
with open("data/data_batch_1", "rb") as f:
data = cPickle.load(f)
这真的很好用。但是,如果我尝试从python3加载数据(而不是cPickle
,而是pickle
),它会失败:
import pickle
with open("data/data_batch_1", "rb") as f:
data = pickle.load(f)
如果失败,则出现以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)
我能否以某种方式将ofiginal数据集转换为从python3中可读的新数据集?或者我可以从python3上读到它吗?
我尝试过用cPickle
加载它,将它转储到json
中,然后通过pickle
读取它,但是numpy矩阵显然不能写成json文件。
发布于 2015-11-22 07:14:58
您需要告诉泡菜要为这些字节串使用什么编解码器,或者告诉它以bytes
的形式加载数据。来自文档
编码和错误告诉泡菜如何解码由Python 2腌制的8位字符串实例;这些字符串实例分别默认为‘ASCII’和‘严格’。编码可以是“字节”,将这些8位字符串实例作为字节对象读取。
若要将字符串加载为bytes
对象,请执行以下操作:
import pickle
with open("data/data_batch_1", "rb") as f:
data = pickle.load(f, encoding='bytes')
https://stackoverflow.com/questions/33856283
复制相似问题