一、CIFAR数据集介绍
1.1 CIFAR-10
数据集图像个数:60000张彩色图像;其中Train sets:50000;Test sets:10000,(测试批的数据里,取自10类中的每一类,每一类随机取1000张,抽剩下的就随机排列组成了训练批)
Class: 共10类,分别是:
飞机airplane、小汽车automobile、卡车truck、轮船ship、马horse、
猫cat、狗dog、鸟bird、鹿deer、青蛙frog。
图像属性: 大小为32*32(RGB),uint8型
数据集的数据结构:(python版本数据集被保存为numpy数组)图像以行优先顺序存储,以便数组的前32个条目是图像第一行的红色通道值。
训练集:50000*3072 的二维数组,其中3072=32*32*3=1024(R)+1024(G)+1024(B),
测试集:10000*3072,其结构如下:
部分样例图片如下:
1.2 CIFAR-100
该数据集有100个类,每个类包含600个图像。每类各有500个训练图像和100个测试图像。CIFAR-100中的100个类被分成20个超类。
图片张数60000 = 100类*600个 = 100*500(train) + 100*100(test)
该数据集的属性和数据结构与CIFAR-10相同。
每个图像都带有一个“精细”标签(它所属的类)和一个“粗糙”标签(它所属的超类),以下是CIFAR-100中的类别列表:
超类 | 类别 |
水生哺乳动物 | 海狸,海豚,水獭,海豹,鲸鱼 |
鱼 | 水族馆的鱼,比目鱼,射线,鲨鱼,鳟鱼 |
花卉 | 兰花,罂粟花,玫瑰,向日葵,郁金香 |
食品容器 | 瓶子,碗,罐子,杯子,盘子 |
水果和蔬菜 | 苹果,蘑菇,橘子,梨,甜椒 |
家用电器 | 时钟,电脑键盘,台灯,电话机,电视机 |
家用家具 | 床,椅子,沙发,桌子,衣柜 |
昆虫 | 蜜蜂,甲虫,蝴蝶,毛虫,蟑螂 |
大型食肉动物 | 熊,豹,狮子,老虎,狼 |
大型人造户外用品 | 桥,城堡,房子,路,摩天大楼 |
大自然的户外场景 | 云,森林,山,平原,海 |
大杂食动物和食草动物 | 骆驼,牛,黑猩猩,大象,袋鼠 |
中型哺乳动物 | 狐狸,豪猪,负鼠,浣熊,臭鼬 |
非昆虫无脊椎动物 | 螃蟹,龙虾,蜗牛,蜘蛛,蠕虫 |
人 | 宝贝,男孩,女孩,男人,女人 |
爬行动物 | 鳄鱼,恐龙,蜥蜴,蛇,乌龟 |
小型哺乳动物 | 仓鼠,老鼠,兔子,母老虎,松鼠 |
树木 | 枫树,橡树,棕榈,松树,柳树 |
车辆1 | 自行车,公共汽车,摩托车,皮卡车,火车 |
车辆2 | 割草机,火箭,有轨电车,坦克,拖拉机 |
数据集下载地址:http://www.cs.toronto.edu/~kriz/cifar.html
二、读取数据集代码
加载CIFAR-10彩色图像数据集数据
"""
import numpy as np
import pickle
path = "D:\\ProgramFiles64\\Anaconda36\\Conda_Work\\CIFAR_data\\cifar-10-python\\"
file_test = 'test_batch'
file_meta = 'batches.meta'
fb = 'data_batch_'
train_data = np.empty((50000,3072))
train_label = []
for i in range(5):
filename = path+fb+str(i+1)
print(filename)
with open(filename,'rb') as f:
D=pickle.load(f,encoding='bytes') #D是一个dict
#D的成员有:b'batch_label';b'data';b'labels';b'filenames'
xs = D[b'data'] #图像数据:10000*3072,是一个numpy数组
ys = D[b'labels'] #是图像对应的标签,是一个list,大小为10000
explain = D[b'batch_label'] #说明:此数据集为5batch中的第1个batch
image_name = D[b'filenames'] #图片的名称,eg:b'rana_clamitans_s_000435.png'
train_data[i*10000:(i+1)*10000] = xs
train_label.extend(ys)
print(D,type(D))
print('\n',type(xs),type(ys),xs.shape,len(ys))
print(explain)
#print(image_name)
print(train_data.shape,len(train_label),train_label)
with open(path+file_test ,'rb') as f:
D1 = pickle.load(f,encoding='bytes')
test_ys = D1[b'labels'] #是图像对应的标签,是一个list,大小为10000
test_xs = D1[b'data'] #图像数据:10000*3072,是一个numpy数组
with open(path+file_meta,'rb') as f:
"""
'batches.meta'是一些说明数据,包括每batch有10000个样本,
类标签名称,b'label_names'
每个图像向量化的长度:b'num_vis':3072
"""
D1 = pickle.load(f,encoding='bytes')
#print(D1,type(D1))