Python读入CIFAR-10数据库

https://www.cnblogs.com/hans209/p/6919851.html


CIFAR-10可以去http://www.cs.toronto.edu/~kriz/cifar.html下载(记得下载python格式)

 

CIFAR-10数据组成:

训练集和测试集分别有50000和10000张图片,RGB3通道,尺寸32×32,如下为data_batch_1的组成(使用pickle.load函数):

 

 可以看到有四部分,清晰明了

 

对于CIFAR-10数据的读取,函数有两个,如下所示

复制代码
1 def load_CIFAR_batch(filename):
2   """ load single batch of cifar """
3   with open(filename, 'rb') as f:
4     datadict = pickle.load(f,encoding='latin1')
5     X = datadict['data']
6     Y = datadict['labels']
7     X = X.reshape(10000, 3, 32,32).transpose(0,2,3,1).astype("float")
8     Y = np.array(Y)
9     return X, Y
复制代码

 

——————————————————————————————————————————————

复制代码
 1 def load_CIFAR10(ROOT):
 2   """ load all of cifar """
 3   xs = []
 4   ys = []
 5   for b in range(1,6):
 6     f = os.path.join(ROOT, 'data_batch_%d' % (b, ))
 7     X, Y = load_CIFAR_batch(f)
 8     xs.append(X)  
 9     ys.append(Y)    
10   Xtr = np.concatenate(xs)#使变成行向量
11   Ytr = np.concatenate(ys)
12   del X, Y
13   Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch'))
14   return Xtr, Ytr, Xte, Yte
复制代码

 

——————————————————————————————————————————————

其中有几个语句要注意一下:

X = X.reshape(10000, 3, 32, 32).transpose(0, 2, 3, 1).astype("float")

起初,X的size为(10000, 3072(3*32*32))。首先reshape很好理解,最后astype的格式转换也很好理解。

可是为什么要调用transpose,转置轴呢?就我认为只需要把一幅图像转成行向量就可以了。是为了方便检索吗?

 

xs.append(X)将5个batch整合起来;np.concatenate(xs)使得最终Xtr的尺寸为(50000,32,32,3)

 

当然还需要一步Xtr_rows = Xtr.reshape(Xtr.shape[0], 32 * 32 * 3)使得每一副图像称为一个行向量,最终就有了50000个行向量(Xtr_rows的尺寸为(50000,3072))

——————————————————————————————————————————————


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值