Cifar-10数据集解析

cifar-10 数据集是机器学习入门第二个使用到的数据集合(第一个当然是MNIST),下面介绍一下如何解析。

1. cifar-10 简介

该数据集共有60000张彩色图像,图像大小是3通道的32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
数据的下载:共有三个版本,python,matlab,binary version 适用于C语言
python: http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz

MATLAB: http://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz

bin: http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz

2. 数据解析,Python为例

cifar-10 数据以字典的形式存储,key为:dict_keys([b’batch_label’, b’labels’, b’data’, b’filenames’]),也就是说包含四个内容: batch_label,标签,图像数据,图片对应的文件名。通过一下函数加载:

def unPickle(file):
    import pickle as pk
    with open(file, 'rb') as f:
    d = pk.load(f, encoding='bytes')
    return d

得到数据:

data = unPickle('data_batch_1')
img = data[b'data']
img.shape  # 显示为(100003072

由于是3通道32*32的彩色图像,故每个图像大小为32*32*3=3072

3. 重建图像

将数组重建为彩色图像:

img_0 = img[0] #得到第一张图像
img_reshape = img_0.reshape(3,32,32)
import PIL.Image as image
import matplotlib.pyplot as plt
r = image.fromarray(img_reshape[0]).convert('L')
g = image.fromarray(img_reshape[1]).convert('L')
b = image.fromarray(img_reshape[2]).convert('L')
img_m = image.merge('RGB',(r,g,b))
plt.imshow(img_m)
plt.show()

重要说明

原数据是以数组存储,在应用中需要数据为什么形式(数据还是rgb图像)根据需求决定。

你可能感兴趣的:(数据集说明)