CIFAR-10和python讀取
阿新 • • 發佈:2018-06-10
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讀取