• 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/

  • 相关阅读:
    网络与通信面试
    拥塞控制
    POSIX
    操作系统面试
    为什么大家都用变量"i"?
    shape与sprite和movieclip的区别
    AS3之麦克风接口【flash.media.Microphone 类】
    Flex 入门之垃圾回收机理
    Flash Player重绘
    时间效率,Timer和EnterFrame在FP 10.1之后测试和建议
  • 原文地址:https://www.cnblogs.com/jimobuwu/p/9161531.html
Copyright © 2020-2023  润新知