CIFAR

Wesley13
• 阅读 465

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

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

下图展示了具体的分类, 

CIFAR

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/

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Pytorch构建栈式自编码器实现以图搜图任务(以cifar10做数据集)
(Pytorch构建栈式自编码器实现以图搜图任务)本文旨在使用CIFAR10数据集,构建与训练栈式自编码器,提取数据集中图像的特征;基于所提取的特征完成CIFAR10中任意图像的检索任务并展示效果。搞清楚pytorch与tensorflow区别pytorchpytorch是一种python科学计算框架作用:无缝替换numpy,通过G
浩浩 浩浩
3年前
【Flutter实战】图片和Icon
3.5图片及ICON3.5.1图片Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvi
Wesley13 Wesley13
2年前
JPG、PNG和GIF图片的基本原理及优…
JPG、PNG和GIF图片的基本原理及优化方法一提到图片,我们就不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成一副图片。当放大位图时,可以看见赖以构成整个图像的无数单个方块。我们常见的图
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
Cocos Creator 如何制作拼图游戏,支持无规则形状!
预览效果!(https://oscimg.oschina.net/oscnet/c075e00adf85d09d261e7006e2eeeef3065.gif)  实现思路  假设一张图,按照row行col列分成count(row\col) 份,由count份碎片组成,每个碎片有自己特定的
Stella981 Stella981
2年前
Python实现bp神经网络识别MNIST数据集
前言训练时读入的是.mat格式的训练集,测试正确率时用的是png格式的图片代码!/usr/bin/envpython3codingutf8importmathimportsysimportosimportnumpyasnpfromPIL
Wesley13 Wesley13
2年前
25、二分类、多分类与多标签问题的区别
二分类、多分类与多标签的基本概念二分类:表示分类任务中有两个类别,比如我们想识别一幅图片是不是猫。也就是说,训练一个分类器,输入一幅图片,用特征向量x表示,输出是不是猫,用y0或1表示。二类分类是假设每个样本都被设置了一个且仅有一个标签0或者1。多类分类(Multiclassclassification):表示分类任务中有多
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。