CIFAR-10和python讀取


1、CIFAR-10,是一個用於做圖像分類研究的數據集。

  • 由60000個圖片組成
  • 6萬個圖片中,5萬張用於訓練,1萬張用於測試
  • 每個圖片是32x32像素
  • 所有圖片可以分成10類
  • 每個圖片都有一個標簽,標記屬於哪一個類
  • 測試集中一個類對應1000張圖
  • 訓練集中將5萬張圖分為5份
  • 類之間的圖片是互斥的,不存在類別重疊的情況

 

下圖展示了具體的分類, 

 

2、 數據集加載:

CIFAR-10提供了三個版本的數據格式:python,matlab,二進制 。

這里以python的加載為例,參考http://cs231n.github.io/assignments2018/assignment1/

 

from __future__ import print_function

from six.moves import cPickle as pickle
import numpy as np
import os
from scipy.misc import imread
import platform

#讀取文件
def load_pickle(f):
    version = platform.python_version_tuple() # 取python版本號
    if version[0] == '2':
        return  pickle.load(f) # pickle.load, 反序列化為python的數據類型
    elif version[0] == '3':
        return  pickle.load(f, encoding='latin1')
    raise ValueError("invalid python version: {}".format(version))

def load_CIFAR_batch(filename):
  """ load single batch of cifar """
  with open(filename, 'rb') as f:
    datadict = load_pickle(f)   # dict類型
    X = datadict['data']        # X, ndarray, 像素值
    Y = datadict['labels']      # Y, list, 標簽, 分類
    
    # reshape, 一維數組轉為矩陣10000行3列。每個entries是32x32
    # transpose,轉置
    # astype,復制,同時指定類型
    X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float")
    Y = np.array(Y)
    return X, Y

def load_CIFAR10(ROOT):
  """ load all of cifar """
  xs = [] # list
  ys = []
  
  # 訓練集batch 1~5
  for b in range(1,6):
    f = os.path.join(ROOT, 'data_batch_%d' % (b, ))
    X, Y = load_CIFAR_batch(f)
    xs.append(X) # 在list尾部添加對象X, x = [..., [X]]
    ys.append(Y)    
  Xtr = np.concatenate(xs) # [ndarray, ndarray] 合並為一個ndarray
  Ytr = np.concatenate(ys)
  del X, Y

  # 測試集
  Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch'))
  return Xtr, Ytr, Xte, Yte

batch數據反序列化出來是

{

  'data': 像素數據,

    'labels':分類標簽

}

 

其中涉及到的python基礎:

 1、from __future__ import print_function, __future__是用於在老版本python中使用新版本特性

 2、from six.moves import cPickle as pickle, 是序列化和反序列化庫,pickle.load,反序列化為python的數據類型

 3、list的append方法,在list尾部添加對象,不需要和之前的數據類型一致

 4、numpy的concatenate,合並array

 

Reference:

 http://www.cs.toronto.edu/~kriz/cifar.html

 http://cs231n.github.io/assignments2018/assignment1/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM