百度云链接:https://pan.baidu.com/s/1KGVwv36Y121TWZ1XrY1o3w
提取码:rqep
取自 小蚂蚁博客
import pickle
import numpy as np
import os
# 目录
CIFAR_DIR = "./cifar-10-batches-py"
print(os.listdir(CIFAR_DIR))
'''
输出:
['batches.meta', 'test_batch', 'data_batch_5', 'data_batch_3', 'data_batch_2', 'data_batch_4', 'readme.html', 'data_batch_1']
这是目录下的所有文件
'''
with open(os.path.join(CIFAR_DIR, 'data_batch_1'), 'rb') as f:
data = pickle.load(f, encoding='bytes') # python3 需要添加 encoding='bytes'
print(type(data)) # 输出 <class 'dict'>
print(data.keys()) # 输出 dict_keys([b'filenames', b'data', b'labels', b'batch_label'])
print(type(data[b'data'])) # 输出 <class 'numpy.ndarray'>
print(data[b'data'].shape) # 输出 (10000, 3072) 说明有 10000 个样本, 3072个特征
print(data[b'data'][0:3])
print(data[b'labels'][:2])
'''
[[ 59 43 50 ... 140 84 72]
[154 126 105 ... 139 142 144]
[255 253 253 ... 83 83 84]]
二维矩阵,每一行是一个特征
[6, 9] 标签值
6代表第六个分类,9代表第九个分类
'''
# 一个名字对应矩阵的一行
# 现在将一个行向量转化为一张图片,看看样子
image_arr = data[b'data'][101] # 拿出 第 101 个样本
image_arr = image_arr.reshape((3, 32, 32)) # 将一个一维向量改变形状,目的是得到这样一个元组:(高,宽,通道数)
image_arr = image_arr.transpose((1, 2, 0)) # 将上一行的元组变为我们需要的样子,第一个元素放到最后
import matplotlib.pyplot as plt
plt.imshow(image_arr) # 将图片输出
plt.show()