CIFAR-10可视化

一、CIFAR-10结构介绍

官方介绍为:CIFAR-10

CIFAR-10数据集包含10个类别,每个类别6000个图片,总共60000个图片。每个图片的大小为32x32。训练集包含50000个图片,测试集包含10000个图片。

  • 下载的文件结构如下:
    CIFAR-10可视化_第1张图片
    其中,训练集为data_batch_1data_batch_2,……data_batch_5,测试集为test_batchbatches.meta包含图片的10个类别的名称。

  • 每个文件都是用pickle包导出的,因此用以下方式打开文件:

def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

每个batch文件中包含:

  • data–一个 NumPy数组,大小为10000x3072,数据类型为uint8。其中,每行存储一个32x32的图片,前1024个数字为red channel的值,中间1024个数字为green channel的值,最后为1024个数字为blue channel的值。图片文件是以行主序存储的,因此,前32个值为图片第一行的red channel值。
  • labels–一个列表,大小为10000,值的范围为0-9,表示文件标签的索引,标签的值可以从batches.meta获取。

二、CIFAR-10可视化

import pickle as p
import numpy as np
from PIL import Image

# names = ["airplane","automobile", "bird","cat", "deer", "dog", "frog", "horse", "ship", "truck"]

def load_CIFAR_batch(filename):
    with open(filename, 'rb')as f:
        datadict = p.load(f,encoding='bytes')
        imagedata = datadict[b'data']
        labels = datadict[b'labels']
        imagedata = imagedata.reshape(10000, 3, 32, 32)
        labels = np.array(labels)
        return imagedata, labels

def load_names(filename):
    with open(filename, 'rb')as f:
        namedict = p.load(f,encoding='bytes')
        names = namedict[b'label_names']
        return names

if __name__ == "__main__":
    
    images, labels = load_CIFAR_batch("./data/cifar-10-batches-py/data_batch_1")
    names = load_names("./data/cifar-10-batches-py/batches.meta")  
    print(images.shape)
    print("正在保存图片……")
    
    for i in range(3):#输出3张图片,利用PIL.Image生成图片
        image = images[i]
        r_array = image[0]
        g_array = image[1]
        b_array = image[2]
        channel_r = Image.fromarray(r_array)
        channel_g = Image.fromarray(g_array)
        channel_b = Image.fromarray(b_array)
        image = Image.merge("RGB",(channel_r, channel_g, channel_b))
        name = "img_" + str(i) + "_" + str(names[labels[i]])+".png"
        image.save("./data/cifar10_images/"+name,"png")
        
    print("保存完毕.")
  • 前3个图片如下所示:
    CIFAR-10可视化_第2张图片

你可能感兴趣的:(python)