python实现CIFAR-10数据集可视化

本文介绍如何使用Python处理CIFAR-10数据集,并将其转化为图像进行可视化展示。CIFAR-10包含60000张32x32的彩色图片,共分为10类,提供了50000张训练图片和10000张测试图片。文章详细介绍了数据集的结构,并给出了具体的Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python实现cifar10数据集的可视化

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”等。

下载python版本的cifar数据

先给个cifar数据下载链接:http://www.cs.toronto.edu/~kriz/cifar.html
链接上提到三个数据版本,分别是python,matlab,binary版本,分别适合python,matlab,C程序
我们用python实现cifar数据转化为图像,当然要用Python版本。


# -*- coding: utf-8 -*-
"""
Created on Tue Dec 20 10:43:59 2016

@author: HDU
"""

# -*- coding:utf-8 -*-
import pickle as p
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as plimg
from PIL import Image
from scipy.misc import imread, imsave, imresize
def load_CIFAR_batch(filename):
    """ load single batch of cifar """
    with open(filename, 'rb')as f:
        datadict = p.load(f)
        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("E:/cifar/cifar-10-batches-py/batches.meta")
    imgX, imgY = load_CIFAR_batch("E:/cifar/cifar-10-batches-py/data_batch_1")
    print "imgX.shape:",imgX.shape
    print "正在保存图片:"
    for i in xrange(imgX.shape[0]):
        imgs = imgX[i - 1]
        if i < 10:#只循环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("E:/cifar/images/"+name,"png")#文件夹下是RGB融合后的图
            #name = "img" + str(i)+".png"像
            #imsave("E:/cifar/images/"+name,img)#文件夹下是RGB融合后的图像
            for j in xrange(imgs.shape[0]):
                img = imgs[j - 1]
                name = "img" + str(i) + str(j) + ".png"
                print "正在保存图片-" + name
                plimg.imsave("E:/cifar/image/" + name, img)#文件夹下是RGB分离的图像

    print "保存完毕."

后面再研究C程序和Matlab版本的格式转化
参考:
http://blog.youkuaiyun.com/zengxyuyu/article/details/53232533#reply

原博客有代码我没跑通,我做了部分修改。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值