CIFAR

1、CIFAR-10,是一个用于做图像分类研究的数据集。

  • 由60000个图片组成
  • 6万个图片中,5万张用于训练,1万张用于测试
  • 每个图片是32x32像素
  • 所有图片可以分成10类
  • 每个图片都有一个标签,标记属于哪一个类
  • 测试集中一个类对应1000张图
  • 训练集中将5万张图分为5份
  • 类之间的图片是互斥的,不存在类别重叠的情况

下图展示了具体的分类, 

2、 数据集加载:

CIFAR-10提供了三个版本的数据格式:python,matlab,二进制 。

这里以python的加载为例,参考http://cs231n.github.io/assignments2018/assignment1/

1from __future__ import print_function 2 3from six.moves import cPickle as pickle 4import numpy as np 5import os 6from scipy.misc import imread 7import platform 8 9#读取文件 10def load_pickle(f): 11 version = platform.python_version_tuple() # 取python版本号 12 if version[0] == '2': 13 return pickle.load(f) # pickle.load, 反序列化为python的数据类型 14 elif version[0] == '3': 15 return pickle.load(f, encoding='latin1') 16 raise ValueError("invalid python version: {}".format(version)) 17 18def load_CIFAR_batch(filename): 19 """ load single batch of cifar """ 20 with open(filename, 'rb') as f: 21 datadict = load_pickle(f) # dict类型 22 X = datadict['data'] # X, ndarray, 像素值 23 Y = datadict['labels'] # Y, list, 标签, 分类 24 25 # reshape, 一维数组转为矩阵100003列。每个entries是32x32 26 # transpose,转置 27 # astype,复制,同时指定类型 28 X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float") 29 Y = np.array(Y) 30 return X, Y 31 32def load_CIFAR10(ROOT): 33 """ load all of cifar """ 34 xs = [] # list 35 ys = [] 36 37 # 训练集batch 15 38 for b in range(1,6): 39 f = os.path.join(ROOT, 'data_batch_%d' % (b, )) 40 X, Y = load_CIFAR_batch(f) 41 xs.append(X) # 在list尾部添加对象X, x = [..., [X]] 42 ys.append(Y) 43 Xtr = np.concatenate(xs) # [ndarray, ndarray] 合并为一个ndarray 44 Ytr = np.concatenate(ys) 45 del X, Y 46 47 # 测试集 48 Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) 49 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/

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

Pytorch构建栈式自编码器实现以图搜图任务(以cifar10做数据集)

(Pytorch构建栈式自编码器实现以图搜图任务)本文旨在使用CIFAR10数据集,构建与训练栈式自编码器,提取数据集中图像的特征;基于所提取的特征完成CIFAR10中任意图像的检索任务并展示效果。搞清楚pytorch与tensorflow区别pytorchpytorch是一种python科学计算框架作用:无缝替换numpy,通过G