您的位置:首页 > 理论基础 > 数据结构算法

Numpy学习(2):将cifar10/100数据文件读入到python数据结构(字典)中

2017-03-14 15:21 495 查看

前言:

cifar10,cifar100是2个比较常用的图像分类数据库,官网地址,从官网下载的数据已经不是原始图片啦,而是经过数值化的numpy数组。那么这些数组究竟是什么样的?如果有一个直观的感受,以后不管是用机器学习算法还是深度学习算法,对于算法的理解都很有帮助。

下面这段代码详细说明了图片数据是怎样一个存储方式,下面代码使用python3.x版本以及pickle的库,跑出来结果一目了然。

正文

闲话少说,请看代码:

'''
首先把官网的python版本数据下载保存到本地
'''
file1 = 'E:/pythonProjects/dataSets/cifar-10-batches-py/data_batch_1'
file2 = 'E:/pythonProjects/dataSets/cifar-10-batches-py/batches.meta'
file3 = 'E:/pythonProjects/dataSets/cifar-10-batches-py/test_batch'

def unpickle(file):  # 该函数将cifar10提供的文件读取到python的数据结构(字典)中
import pickle
fo = open(file, 'rb')
dict = pickle.load(fo,encoding='iso-8859-1')
fo.close()
return dict

dict_train_batch1 = unpickle(file1) # 将data_batch文件读入到数据结构(字典)中

print(dict_train_batch1) # 每个batch是一个字典
print(dict_train_batch1.keys())  # 字典里有4组键值对

'''
trainSet字典里有4组键值对
1,batch_label :表明batch的位置,没什么用
2,data :32*32图片的数值化数组,是一个10000*3072的numpy二维数组,
每一行代表一张图片,一行分3段(红绿蓝色道),每段1024个元素。
3,labels :data每一行对应的标签(数字0-9),是个一维数组,10000个元素
4,filenames : data每一行对应的文件名,同是一个一维数组,10000个元素
'''
data_train_batch1 = dict_train_batch1.get('data') # 字典中取data
print(data_train_batch1)

labels = dict_train_batch1.get('labels') # 字典中取labels
print(labels)

filenames = dict_train_batch1.get('filenames') # 字典中取filenames
print(filenames)

print('--------------我是分割线---------------------------------')

dict_test_batch = unpickle(file3)
print(dict_test_batch)
print(dict_test_batch.keys())
'''
跟trainSet中一样,testSet中有相同的4组键值对
说明同上
'''

print('--------------我是分割线---------------------------------')

'''
batches.meta是一个字典,其中包含了一个列表,列表中是10种分类的具体名称
一般这个文件用不到
'''
dict_meta_batch = unpickle(file2)
print(dict_meta_batch)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: