【HDF5】h5py的基本使用方法+GTSRB数据集加载

 

H5py包是HDF5二进制数据格式的python接口,可以用于存储大量的数据并使用Numpy进行处理。成千上万的数据集可以存储在单一的文件中。

h5py的官方文档:http://docs.h5py.org/en/latest/quick.html

现在我手头有德国交通牌数据集的h5文件,里面存有图片和相应的label,需要读取h5文件来读取该数据集。图像内容是X_test,图像标签是Y_test。以此举例:

读取文件:

import h5py
f = h5py.File('gtsrb_datasets.h5', 'r')  #文件扩展名是.hdf5也是一样的

h5文件就像一个python字典,我们可以查看它的key

>>> list(f.keys())
[u'X_test',u'Y_test']

查看数据集的形状和数据类型:

>>> xset=f['X_test']
>>> xset.shape
(12630,32,32,3)
>>> xset.dtype
dtype('uint8')

>>> yset=f['Y_test']
>>> yset.shape
(12630,43)
>>> yset.dtype
dtype('uint8')

我的数据集里有12630张图像,每张图像是32*32*3的小图,德国交通牌数据集有43个类别,每张图片的标签是一个one-hot向量。现在我要将数据读取出来:

def load_hdf5(data_filename, keys=None):

    ''' assume all datasets are numpy arrays '''
    dataset = {}
    with h5py.File(data_filename) as hf:
        if keys is None:
            for name in hf:
                dataset[name] = np.array(hf.get(name))
        else:
            for name in keys:
                dataset[name] = np.array(hf.get(name))

    return dataset


dataset = load_hdf5('./gtsrb_dataset.h5', keys=['X_test', 'Y_test'])
X_test = np.array(dataset['X_test'], dtype='float32')
Y_test = np.array(dataset['Y_test'], dtype='float32')
print('X_test shape %s' % str(X_test.shape))
print('Y_test shape %s' % str(Y_test.shape))

现在所有的图都读到了X_test里,所有的标签都读到了Y_test里,让我们随便看一个吧:

【HDF5】h5py的基本使用方法+GTSRB数据集加载_第1张图片

可视化部分GTSRB数据集:

classes=[]
num_classes=10  #其实是有43个类别,但因为图太小了,全展示出来很挤所以我只展示10个
for i in range(0,num_classes):
    classes.append(i)  #这里其实可以将类别的英文标签等等粘上去
samples_per_class=10
Y_test=np.argmax(Y_test,axis=1) #将one-hot编码转换为数字
for y,cls in enumerate(classes):
#     onehot_y=keras.utils.to_categorical(y,num_classes)
    idxs=np.flatnonzero((Y_test)==y)  #寻找Y_test中标签为y的元素所在的索引
    idxs=np.random.choice(idxs,samples_per_class,replace=False)  #随机选择samples个样本
    for j,idx in enumerate(idxs):
        plt_idx=j*num_classes+y+1
        plt.subplot(samples_per_class,num_classes,plt_idx)
        plt.imshow(X_test[idx].astype('uint8'))
        plt.axis('off')
        if j==0:
            plt.title(cls)
plt.show()

【HDF5】h5py的基本使用方法+GTSRB数据集加载_第2张图片

=======================================================================

 

你可能感兴趣的:(数据集处理,GTSRB,hdf5)