参考博客地址:http://blog.csdn.net/zengxyuyu/article/details/53232533
tensorflow的mnist和cifar10数据集,官方文档的讲解都是一张张图片,但是下载下来的数据集,都是二进制文件。这些二进制文件还不小,用文本编辑器打开看也看不懂,故此希望能将二进制数据再现为png图像!
① CIFAR-10数据集包含60000个32*32的彩色图像,共有10类。有50000个训练图像和10000个测试图像。
数据集分为5个训练块和1个测试块,每个块有10000个图像。测试块包含从每类随机选择的1000个图像。训练块以随机的顺序包含这些图像,但一些训练块可能比其它类包含更多的图像。训练块每类包含5000个图像。
②data——1个10000*3072大小的uint8s数组。数组的每行存储1张32*32的图像。第1个1024包含红色通道值,下1个包含绿色,最后的1024包含蓝色。图像存储以行顺序为主,所以数组的前32列为图像第1行的红色通道值。
labels——1个10000数的范围为0~9的列表。索引i的数值表示数组data中第i个图像的标签。
③数据集中包含另外1个叫batches.meta的文件。它也包含1个Python字典对象。有如下列元素:
label_names——1个10元素的列表,给labels中的数值标签以有意义的名称。例如,label_names[0] == “airplane”, label_names[1] == “automobile”等。
cifar数据下载链接:http://www.cs.toronto.edu/~kriz/cifar.html
链接上提到三个数据集版本,分别是python、matlab、binary版本,分别适合python、matlab、C程序
我们用python实现cifar数据转化为图像,当然要用Python版本的啦
下载好了,直接上代码,老铁们记得改路径~~
# 用于将cifar10的数据可视化 import pickle as p import numpy as np import matplotlib.pyplot as plt import matplotlib.image as plimg from PIL import Image def load_CIFAR_batch(filename): with open(filename, 'rb')as f: # datadict = p.load(f) datadict = p.load(f, encoding='latin1') X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32) Y = np.array(Y) return X, Y def load_CIFAR_Labels(filename): with open(filename, 'rb') as f: lines = [x for x in f.readlines()] print(lines) if __name__ == "__main__": load_CIFAR_Labels("data/CIFAR10_data/batches.meta") imgX, imgY = load_CIFAR_batch("data/CIFAR10_data/data_batch_1") print(imgX.shape) print("正在保存图片:") for i in range(imgX.shape[0]): # for i in range(10): # 值输出10张图片,用来做演示 # imgs = imgX[i - 1]#? imgs = imgX[i] if i < 100: # 只循环100张图片 img0 = imgs[0] img1 = imgs[1] img2 = imgs[2] i0 = Image.fromarray(img0) # 从数据,生成image对象 i1 = Image.fromarray(img1) i2 = Image.fromarray(img2) img = Image.merge("RGB", (i0, i1, i2)) name = "img" + str(i) + ".png" img.save("data/cifar10_100/" + name, "png") # 文件夹下是RGB融合后的图像 for j in range(imgs.shape[0]): # img = imgs[j - 1] img = imgs[j] name = "img" + str(i) + str(j) + ".png" print("正在保存图片" + name) plimg.imsave("data/cifar10_100s/" + name, img) # 文件夹下是RGB分离的图像 print("保存完毕.")