无法加载 CIFAR-10 数据集:加载键“\x1f”无效
Posted
技术标签:
【中文标题】无法加载 CIFAR-10 数据集:加载键“\\x1f”无效【英文标题】:Unable to load CIFAR-10 dataset: Invalid load key '\x1f'无法加载 CIFAR-10 数据集:加载键“\x1f”无效 【发布时间】:2017-12-20 15:39:03 【问题描述】:我目前正在使用 TensorFlow 中的一些神经网络 - 我决定尝试使用 CIFAR-10 数据集。我从网站下载了“CIFAR-10 python”数据集:https://www.cs.toronto.edu/~kriz/cifar.html。
在 Python 中,我也尝试直接复制提供的用于加载数据的代码:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
但是,当我运行它时,我最终得到以下错误:_pickle.UnpicklingError: invalid load key, '\x1f'.
我也尝试使用 gzip 模块 (with gzip.open(file, 'rb') as fo:
) 打开文件,但这也不起作用。
是数据集很糟糕,还是代码有问题?如果数据集不好,我在哪里可以获得适合 CIFAR-10 的数据集?
【问题讨论】:
尝试删除encoding='bytes'
?
我试过了,同样的错误仍然存在。
好的...你有 keras 吗?
我通过pip安装了tensorflow,所以pip install tensorflow
。不确定这是否也会安装 keras,但我假设不会。
我不知道这是否已经解决,但我下载了 python 数据集,pickle 可以使用该数据集。我相信 tensorflow 示例中使用的数据集是二进制数据集,不能解压。
【参考方案1】:
提取您的 *.gz 文件并使用此代码
from six.moves import cPickle
f = open("path/data_batch_1", 'rb')
datadict = cPickle.load(f,encoding='latin1')
f.close()
X = datadict["data"]
Y = datadict['labels']
【讨论】:
【参考方案2】:您似乎需要先解压缩 *gz 文件,然后再解压缩 *tar 文件才能获得 data_batches 的文件夹。之后,您可以对这些批次应用 pickle.load()。
【讨论】:
【参考方案3】:只要解压你的 tar.gz 文件,你会得到一个文件夹 data_batch_1, data_batch_2, ...
使用后,提供的代码将数据加载到您的项目中:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
dict = unpickle('data_batch_1')
【讨论】:
【参考方案4】:我在使用 jupyter(vscode) 和 python3.8/3.7 时遇到了同样的问题。我试图编辑源 cifar.py cifar10.py 但没有成功。 我的解决方案是在单独的普通 .py 文件中运行这两行代码:
from tensorflow.keras.datasets import cifar10
cifar10.load_data()
之后它在 Jupyter 上运行良好。
【讨论】:
以上是关于无法加载 CIFAR-10 数据集:加载键“\x1f”无效的主要内容,如果未能解决你的问题,请参考以下文章
iPython 笔记本 - 加载 CIFAR - 10 数据集时出现内存错误
tf.keras在 cifar 上训练 AlexNet,数据集过大导致 OOM
是否可以在用于更传统数据集 (CIFAR-10/MNIST) 的 CNN 模型中使用高光谱 1x1 像素的集合?