本文要做的是如何把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')
f['group'].create_dataset('rc_32',data=rc_32)
f['group'].create_dataset('rc_64',data=rc_64)
f['group'].create_dataset('rc_128',data=rc_128)
# 這樣就在group ‘data’下創建了三個數據集了。
其實還有一種快速寫入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就像在目錄下寫入有具體名字的數據一樣。