1. 程式人生 > >CIFAR-10和python讀取

CIFAR-10和python讀取

test 反序列化 ret 數據集 之前 array 需要 src Coding

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

CIFAR-10和python讀取