-
CIFAR-10数据集
CIFAR-10数据集是由10个类的60000个32×32彩色图像组成,每个类有6000个图像,有50000个训练图像和10000个测试图像
数据集分为5个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自10个类别,每个类别恰好1000个随机选择的图像。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
下面这幅图列举了10个类,每一类展示了随机的10张图片:
里面包含了batches.meta 、 data_batch_1~data_batch_5(每个文件包含了10000张图片) 、test_batch(包含了10000张图片),
他们都是由cPickle库产生的序列化后的对象
下面以data_batch_1为例,我们来看看每个文件里面包含了什么内容?
可以通过下面的程序来实现:
import pickle
def load_file(filename):
with open(filename, 'rb') as fo: %将filename的名字替换为fo
data = pickle.load(fo, encoding='latin1')
return data
data = load_file('/home/jw/下载/assignment1/cs231n/datasets/cifar-10-batches-py/data_batch_1')
print(data.keys())
运行结果如下:
dict_keys(['batch_label', 'labels', 'data', 'filenames'])
若想访问字典的具体数值,则可以将
print(data.keys())改为print(data.values())
-
batch_label
对应的值是一个字符串,用来表明当前文件的一些基本信息。
如果是 data_batch_1 这个文件,里面的值就是
training batch 1 of 5
如果是 test_batch 这个文件,里面的值就是
testing batch 1 of 1 -
Labels
1个10000数的范围位0~9的列表。索引i的数值表示数组data中第i个图像的标签。 -
data
data是一个10000×3072(32×32×3)大小的uint8s数组。数组的每行储存一张32×32的图像。前1024列是红色通道,中间的1024列是绿色通道,最后的1024列是蓝色通道。图像储存以行位顺序,所以数组的前32列为突袭那该第1行的红色通道。 -
filenames
长度为10000的列表,里面每一项是代表图片文件名的字符串 -
batches.meta
数据集中包含另外一个叫batches.meta的文件。它也包含1个python字典对象。有如下列元素:label_names是一个10元素的列表,给labels中的数值标签有意义的名称。例如,label_name[0]==’‘airplane’,label_names[1]='automobile’等
下面是运行的程序和显示结果:
import pickle
def load_file(filename):
with open(filename, 'rb') as fo:
data = pickle.load(fo, encoding='latin1')
return data
data = load_file('/home/jw/下载/assignment1/cs231n/datasets/cifar-10-batches-py/batches.meta')
print(data.values())
print(data.keys())
显示结果:
dict_values([10000, ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'], 3072])
dict_keys(['num_cases_per_batch', 'label_names', 'num_vis'])