CIFAR-10 数据集是一个广泛使用的图像数据集,具体可见CIFAR-10 和 CIFAR-100 数据集,它包含 60,000 张 32x32 像素的彩色(3 channels)图像,分为 10 个类别,每个类别有 6,000 张图像。每个类别的图像数量分布如下:
CIFAR-10 数据集通常以二进制文件的形式提供,每个类别的图像存储在一个单独的文件中。文件名通常遵循以下格式:
data_batch_1
, data_batch_2
, …, data_batch_5
:每个文件包含 10,000 张图像,总共 50,000 张图像用于训练。test_batch
:包含 10,000 张图像,用于测试。每个二进制文件包含以下结构:
每张图像由以下部分组成:
要访问 CIFAR-10 数据集中的图像,通常需要执行以下步骤:
PIL
或 opencv
)读取二进制文件。编辑器 | 解释器 |
---|---|
Pycharm Pro 2024.1 | Python3.10 |
使用 PIL
库加载 CIFAR-10 数据集中的图像:
ps
:可查看cifar10数据集读取和显示
from matplotlib import pyplot as plt
# 数据集读取
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
# 输出数据格式
dict = unpickle('E:\Deep Learning\cifar-10-python\cifar-10-batches-py\data_batch_1')
# print(dict)
img = dict[b'data']
print(img.shape)
# 显示图片
show_image = img[666]
img_reshape = show_image.reshape(3, 32, 32)
pic = img_reshape.transpose(1, 2, 0) # (3, 32, 32) --> (32, 32, 3)
plt.imshow(pic)
plt.show()
# 输出label
label = dict[b'labels']
image_label = label[666]
print(image_label)
输出(output):
{b'batch_label': b'training batch 1 of 5',
b'labels': [6, 9 ... 1, 5],
b'data': array([[ 59, 43, 50, ..., 140, 84, 72],
...
[ 62, 61, 60, ..., 130, 130, 131]], dtype=uint8),
b'filenames': [b'leptodactylus_pentadactylus_s_000004.png', b'camion_s_000148.png',
...
b'estate_car_s_001433.png', b'cur_s_000170.png']}
在 CIFAR-10 数据集的二进制文件中,标签数据并不是直接存储在图像数据的旁边。相反,标签是以单独的数字形式存储的,通常在图像数据块之后。每个标签代表一个图像所属的类别,并以整数形式给出,范围从 0 到 9,对应于数据集中的 10 个类别。
在解析 CIFAR-10 数据集的二进制文件时,你需要按照数据集的格式说明来读取和解析这些标签。以下是 CIFAR-10 数据集文件中标签数据存储的一般结构:
在 CIFAR-10 的 data_batch
文件中,每个批次包含 10,000 张图像的数据,图像数据和标签数据是交错存储的。具体来说,文件中的前 10,000 个整数是标签,紧接着的大量数据是图像的像素值。
在 CIFAR-10 的 data_batch
文件中,每个批次包含 10,000 张图像的数据,图像数据和标签数据是交错存储的。具体来说,文件中的前 10,000 个整数是标签,紧接着的大量数据是图像的像素值。