本文要做的是如何把cifar-10数据集创建并写入hdf5文件中,以介绍python操作HDF类文件的常用方法
1、从官网下载数据集cifar-10:cifar官网(注意下载python版的)
下载完后要先解压,不能直接上代码;Linux下解压:
tar -zxvf 压缩包名.tar.gz # 适用于.tar.gz文件
unzip filename.zip # 适用于zip文件
然后才能上以下代码来读取数据文件:
import cPickle as pickle
def unpickle(file):
fo = open(file, 'rb')
dict = pickle.load(fo)
fo.close()
return dict['data'], dict['labels']
# 这样就可以读取每个batch的数据了,一个batch包含10000个样本以及对应的标签,从batch_1到5是5万个训练样本,还有个test_batch是一万个测试样本以及对应标签;
假设我对cifar处理后得到三个文件分别为‘cifar_rc_32.npy’,‘cifar_rc_64.npy’,‘cifar_rc_128.npy’三个文件,要创建或写入‘cifar.hdf5’:
import h5py
import numpy as np
rc_32 = np.load('cifar_rc_32.npy')
rc_64 = np.load('cifar_rc_64.npy')
rc_128 = np.load('cifar_rc_128.npy')
f = h5py.File('cifar.hdf5','w') # 如果没有会创建,有的话会覆盖式写入
#先要创建组,我一开始因为没有创建组group导致后来的操作会有麻烦,所以建议先创建组:
f.create_group('data')
dataset = f['group'].create_dataset('rc_32',data=rc_32)
dataset.attrs['prob_hh'] = property_value # 还可以给数据集对象添加属性描述.
f['group'].create_dataset('rc_64',data=rc_64)
f['group'].create_dataset('rc_128',data=rc_128)
# 这样就在group ‘data’下创建了三个数据集了。
# 写入数据集还可以有一下操作:
# 准备待写入数据:
data = np.arange(10000).reshape(100,100)
# 写入数据:
f['data'] = data
label = np.arange(10000)
f['label/resnet/rc_128'] = label
# 这样也可以创建数据集
其实还有一种快速写入hdf5文件的方式就是如果你创建过组可以用更方面的方式写入数据到原来不存在的目录:
f['labels/resnet1/rc_32'] = rc_32
f['labels/resnet1/rc_64'] = rc_64
f['labels/resnet1/rc_128'] = rc_128
rc_32、rc_64、rc_128是数据。
group下面还可以创建group,dataset,是嵌套的,创建group就像创建目录一样;创建dataset就像在目录下写入有具体名字的数据一样。