Pickle 加载 CIFAR-100 数据
Pickle loading CIFAR-100 data
我正在尝试解开 CIFAR-100 数据,但我认为我做的不正确。 From their example,你载入文件然后调用pickle.load()
:
#imports data
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
但是当我 运行 使用 CIFAR-100 数据时,它失败了:
dict = pickle.load(fo, encoding='bytes')
TypeError: load() got an unexpected keyword argument 'encoding'
当我删除 encoding
参数时,它会出错:
X, Y, X_test, Y_test = unpickle("cifar-100-python/train")
ValueError: need more than 0 values to unpack
基本上说明它没有从训练文件中检索到任何数据。这就是 dict
returns: []
这是代码示例:
from __future__ import division, print_function, absolute_import
import cPickle as pickle
#imports data
def unpickle(file):
with open(file, 'rb') as fo:
dict = pickle.load(fo)
return dict
print(unpickle("cifar-100-python/train")) # <-- This prints []
X, Y, X_test, Y_test = unpickle("cifar-100-python/train")
我是运行宁python 2.7.10。我错过了什么吗?
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
dict=unpickle("file")
print dict['data']
使用 dict['data'] 获取所有图像
从我们在评论中的讨论来看,您的下载似乎有问题。我从您上面提供的 link 下载了 CIFAR-100 数据库,使用了您提供的第二个版本 unpickle
并成功加载了数据。请注意,'encoding'
参数仅对 Python 3 有效,因此我使用了您提供的第二个版本,因为它适用于 Python 2.
具体来说,使用我从存档中提取并放置在当前目录中的 train
pickle 文件,这是我的 REPL 历史记录:
In [14]: import cPickle as pickle
In [15]: def unpickle(file):
...: with open(file, 'rb') as fo:
...: dict = pickle.load(fo)
...: return dict
...:
In [16]: data = unpickle('train')
In [17]: len(data)
Out[17]: 5
In [18]: data.keys()
Out[18]: ['data', 'batch_label', 'fine_labels', 'coarse_labels', 'filenames']
In [19]: data['data'].shape
Out[19]: (50000L, 3072L)
如你所见,我得到了一本有 5 个键的字典。在字典中使用 'data'
键存储的值包含我们的 32 x 32 彩色像素数据,其中每一行都是图像的展开版本(32 x 32 x 3 彩色通道 = 3072 像素)。正如我们预期的那样,还有 50000 张图像。因此,尝试再次下载数据并使用您的 unpickle
函数 - 您提供的第二个函数。它应该像我一样工作。
替换:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
与:
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
我会给你一个适用于Python 2.x 和3.x 的解决方案。
import pickle
with open(file, 'rb') as fo:
try:
samples = pickle.load(fo)
except UnicodeDecodeError: #python 3.x
fo.seek(0)
samples = pickle.load(fo, encoding='latin1')
我正在尝试解开 CIFAR-100 数据,但我认为我做的不正确。 From their example,你载入文件然后调用pickle.load()
:
#imports data
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
但是当我 运行 使用 CIFAR-100 数据时,它失败了:
dict = pickle.load(fo, encoding='bytes')
TypeError: load() got an unexpected keyword argument 'encoding'
当我删除 encoding
参数时,它会出错:
X, Y, X_test, Y_test = unpickle("cifar-100-python/train")
ValueError: need more than 0 values to unpack
基本上说明它没有从训练文件中检索到任何数据。这就是 dict
returns: []
这是代码示例:
from __future__ import division, print_function, absolute_import
import cPickle as pickle
#imports data
def unpickle(file):
with open(file, 'rb') as fo:
dict = pickle.load(fo)
return dict
print(unpickle("cifar-100-python/train")) # <-- This prints []
X, Y, X_test, Y_test = unpickle("cifar-100-python/train")
我是运行宁python 2.7.10。我错过了什么吗?
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
dict=unpickle("file")
print dict['data']
使用 dict['data'] 获取所有图像
从我们在评论中的讨论来看,您的下载似乎有问题。我从您上面提供的 link 下载了 CIFAR-100 数据库,使用了您提供的第二个版本 unpickle
并成功加载了数据。请注意,'encoding'
参数仅对 Python 3 有效,因此我使用了您提供的第二个版本,因为它适用于 Python 2.
具体来说,使用我从存档中提取并放置在当前目录中的 train
pickle 文件,这是我的 REPL 历史记录:
In [14]: import cPickle as pickle
In [15]: def unpickle(file):
...: with open(file, 'rb') as fo:
...: dict = pickle.load(fo)
...: return dict
...:
In [16]: data = unpickle('train')
In [17]: len(data)
Out[17]: 5
In [18]: data.keys()
Out[18]: ['data', 'batch_label', 'fine_labels', 'coarse_labels', 'filenames']
In [19]: data['data'].shape
Out[19]: (50000L, 3072L)
如你所见,我得到了一本有 5 个键的字典。在字典中使用 'data'
键存储的值包含我们的 32 x 32 彩色像素数据,其中每一行都是图像的展开版本(32 x 32 x 3 彩色通道 = 3072 像素)。正如我们预期的那样,还有 50000 张图像。因此,尝试再次下载数据并使用您的 unpickle
函数 - 您提供的第二个函数。它应该像我一样工作。
替换:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
与:
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
我会给你一个适用于Python 2.x 和3.x 的解决方案。
import pickle
with open(file, 'rb') as fo:
try:
samples = pickle.load(fo)
except UnicodeDecodeError: #python 3.x
fo.seek(0)
samples = pickle.load(fo, encoding='latin1')