python CIFAR-10データセットの可視化を実現

5695 ワード

python cifar 10データセットの可視化を実現


CIFAR-10データセットの紹介


①CIFAR-10データセットは、32*32のカラー画像を60000個含み、10種類ある.50000個のトレーニング画像と10000個のテスト画像があります.データセットは5つのトレーニングブロックと1つのテストブロックに分けられ、各ブロックには10000個の画像がある.テストブロックには、各クラスからランダムに選択された1000個の画像が含まれます.トレーニングブロックはランダムな順序でこれらの画像を含むが、一部のトレーニングブロックは他のクラスよりも多くの画像を含む可能性がある.トレーニングブロックは、各クラスに5000個の画像を含む.②data——10000*3072サイズのuint 8 s配列1個.配列の各行には32*32の画像が1枚格納されます.1番目の1024は赤色のチャネル値を含み、次の1024は緑色を含み、最後の1024は青色を含む.画像記憶は行順が主であるため、配列の上位32列が画像1行目の赤色チャネル値となる.Labels--10000数の範囲が0~9のリストです.インデックスiの数値は、配列dataのi番目の画像のラベルを表す.③データセットにはbatchesというもう一つのものが含まれている.metaのファイル.Python辞書オブジェクトも1つ含まれています.次の要素があります:label_names--labelsの数値ラベルに意味のある名前を付ける10要素のリストです.たとえばlabel_names[0] == “airplane”, label_names[1]=「automobile」など.

pythonバージョンのcifarデータをダウンロード


まずcifarデータにリンクをダウンロードします.http://www.cs.toronto.edu/~kriz/cifar.htmlリンクには、python、matlab、binaryの3つのデータバージョンが記載されています.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.csdn.net/zengxyuyu/article/details/53232533#reply
元のブログにはコードがあったので、私は一部の修正をしました.