用Python3.x解析CIFAR-10数据集图片
2018-01-25 18:12
603 查看
用Python3.x解析CIFAR-10数据集图片
在学习tensorflow的mnist和cifar实例的时候,官方文档给出的讲解都是一张张图片,直观清晰,当我们看到程序下载下来的数据的时候,都是二进制文件,这些二进制文件还不小,用文本编辑器打开看也看不懂,要是将数据再现为图像
(1)CIFAR-10数据集介绍
① 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”等。
(2)下载python版本的cifar数据
先给个cifar数据下载链接:http://www.cs.toronto.edu/~kriz/cifar.html
链接上提到三个数据版本,分别是python,matlab,binary版本,分别适合python,matlab,C程序
我们用python实现cifar数据转化为图像,当然要用Python版本的
下载好了,我们就可以用下面的代码:
输出结果:
生成图片:
![](https://img-blog.csdn.net/20180125101137807?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQmFycnlfSg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
另一个同样可以可视化CIFAR10数据集代码:
输出结果:
![](https://img-blog.csdn.net/20180125181009097?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQmFycnlfSg==/font/5a6L5L2T/fontsize<br/>a5be<br/>/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意:代码中设置的路径一定要根据自己的项目路径与数据集路径进行更改。
详细了解CIFAR-10请移步CIFAR-10整体解析与评价
在学习tensorflow的mnist和cifar实例的时候,官方文档给出的讲解都是一张张图片,直观清晰,当我们看到程序下载下来的数据的时候,都是二进制文件,这些二进制文件还不小,用文本编辑器打开看也看不懂,要是将数据再现为图像
(1)CIFAR-10数据集介绍
① 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”等。
(2)下载python版本的cifar数据
先给个cifar数据下载链接:http://www.cs.toronto.edu/~kriz/cifar.html
链接上提到三个数据版本,分别是python,matlab,binary版本,分别适合python,matlab,C程序
我们用python实现cifar数据转化为图像,当然要用Python版本的
下载好了,我们就可以用下面的代码:
# -*- coding: utf-8 -*- # @Time : 2018/1/24 19:53 # @Author : Barry # @File : image_version.py # @Software: PyCharm Community Edition import pickle as p import numpy as np import matplotlib.pyplot as plt import matplotlib.image as plimg from PIL import Image # import sys # # sys.setdefaultencoding('utf8') def load_CIFAR_batch(filename): """ load single batch of cifar """ with open(filename, 'rb')as f: datadict = p.load(f,encoding='iso-8859-1') 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("D:/PycharmProject/cifar/cifar10/cifar-10-batches-py/batches.meta") imgX, imgY = load_CIFAR_batch("D:/PycharmProject/cifar/cifar10/cifar-10-batches-py/data_batch_1") print (imgX.shape) print ("正在保存图片:") for i in range(imgX.shape[0]): imgs = imgX[i - 1] if i < 1000:#只循环100张图片,这句注释掉可以便利出所有的图片,图片较多,可能要一定的时间 img0 = imgs[0] img1 = imgs[1] img2 = imgs[2] i0 = Image.fromarray(img0) i1 = Image.fromarray(img1) i2 = Image.fromarray(img2) img = Image.merge("RGB",(i0,i1,i2)) name = "img" + str(i) img.save("D:/PycharmProject/cifar/cifar10/cifar-10-batches-py/img/"+name,"png")#文件夹下是RGB融合后的图像 for j in range(imgs.shape[0]): img = imgs[j - 1] name = "img" + str(i) + str(j) + ".png" print ("正在保存图片" + name) plimg.imsave("D:/PycharmProject/cifar/cifar10/cifar-10-batches-py/img/" + name, img)#文件夹下是RGB分离的图像 print ("保存完毕.")
输出结果:
[b"\x80\x02}q\x01(U\x13num_cases_per_batchq\x02M\x10'U\x0blabel_namesq\x03]q\x04(U\x08airplaneq\x05U\n", b'automobileq\x06U\x04birdq\x07U\x03catq\x08U\x04deerq\tU\x03dogq\n', b'U\x04frogq\x0bU\x05horseq\x0cU\x04shipq\rU\x05truckq\x0eeU\x07num_visq\x0fM\x00\x0cu.'] (10000, 3, 32, 32) 正在保存图片: 正在保存图片img00.png 正在保存图片img01.png 正在保存图片img02.png 正在保存图片img10.png 正在保存图片img11.png 正在保存图片img12.png ...
生成图片:
另一个同样可以可视化CIFAR10数据集代码:
# -*- coding: utf-8 -*- # @Time : 2018/1/25 16:44 # @Author : Barry # @File : image_visualization.py # @Software: PyCharm Community Edition from scipy.misc import imsave import numpy as np # 解压缩,返回解压后的字典 def unpickle(file): import pickle fo = open(file, 'rb') dict = pickle.load(fo,encoding='iso-8859-1') fo.close() return dict # 生成训练集图片,如果需要png格式,只需要改图片后缀名即可。 for j in range(1, 6): dataName = "data_batch_" + str(j) # 读取当前目录下的data_batch12345文件,dataName其实也是data_batch文件的路径,本文和脚本文件在同一目录下。 Xtr = unpickle(dataName) print (dataName + " is loading...") for i in range(0, 10000): img = np.reshape(Xtr['data'][i], (3, 32, 32)) # Xtr['data']为图片二进制数据 img = img.transpose(1, 2, 0) # 读取image picName = 'train/' + str(Xtr['labels'][i]) + '_' + str(i + (j - 1)*10000) + '.jpg' # Xtr['labels']为图片的标签,值范围0-9,本文中,train文件夹需要存在,并与脚本文件在同一目录下。 imsave(picName, img) #imsave("D:/PycharmProject/cifar/cifar10/train/" + picName, img) # 文件夹下是RGB分离的图像 print (dataName + " loaded.") print ("test_batch is loading...") # 生成测试集图片 testXtr = unpickle("test_batch") for i in range(0, 10000): img = np.reshape(testXtr['data'][i], (3, 32, 32)) img = img.transpose(1, 2, 0) picName = 'test/' + str(testXtr['labels'][i]) + '_' + str(i) + '.jpg' imsave(picName, img) #imsave("D:/PycharmProject/cifar/cifar10/train/" + picName, img) print ("test_batch loaded.")
输出结果:
注意:代码中设置的路径一定要根据自己的项目路径与数据集路径进行更改。
详细了解CIFAR-10请移步CIFAR-10整体解析与评价
相关文章推荐
- 用Python3.x解析CIFAR-10数据集图片
- 用python将cifar-10二进制数据集转成图片格式《菜鸟教程》
- 数据集(benchmark)、常用数据集的解析(cifar-10、)
- CIFAR-10数据集可视化Python版本
- python实现CIFAR-10数据集可视化
- Python3读取深度学习CIFAR-10数据集出现的若干问题解决
- 解析cifar的python数据集中的图片
- 10 行代码判定色*情*图片——Python
- Python3.x爬虫教程:爬网页、爬图片、自动登录
- Python在方括号中使用for循环,类似[0 for i in range(10)],叫 列表解析List Comprehensions
- 【深度学习】针对CIFAR-10模型所写的进行图片size,图片名,后缀图片格式写的预处理程序
- dblp 数据集之python lxml解析
- 第三篇:显示cifar-10中的图片
- TensorFlow-CNN CIFAR-10数据集 学习
- voc数据集---截取图片名python
- [keras实战] 小型CNN实现Cifar-10数据集84%准确率
- 糗事百科 爬虫 2017 10/1版本的糗事百科 python3.x
- 使用Python将MNIST数据集转化为图片
- mnist数据集转成图片 Python 实现
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二