cs231n knn——cifar数据集介绍

  • 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'])

猜你喜欢

转载自blog.csdn.net/weixin_41269731/article/details/88031502