为Torch创建hdf5训练文件

1. Torch与HDF5

Torch 是用C/CUDA作为底层实现,用LuaJIT作为接口的机器学习算法框架。

HDF5是用于海量复杂数据集管理的技术,能够支持多种平台与多种语言接口(C,C++,Python等)。

Torch的tutorial只提供了处理images和random tensors的方法,并没有对其他格式提供示例。本文使用将对如何创建HDF5数据集以及如何在Torch中使用HDF5文件格式做一个梳理。

2. 使用Python创建HDF5文件

  • 1 在Python中安装 h5py
    在Ubuntu下 sudo pip install h5py

  • 2 创建HDF5对象
    我们需要的HDF5文件在root (group) 下应该有“data”和“label”两个dataset,并在创建时指定这两个dataset的尺寸。

    1
    2
    3
    4
    import h5py, os                             
    f=h5py.File('train.h5','w') #以'w'模式创建一个名为'train.h5'的HDF5对象
    f.create_dataset('data',(100,3,32,32),dtype='f8') #有100个样本,每个样本有三个channel,每个channle的尺寸是32*32
    f.create_dataset('label',(100,1),dtype='i') #创建存放label的dataset,尺寸是100*1
  • 3 写入数据
    写入数据其实很简单,只需要对dataset中的每个对象赋值即可。我们使用numpy随机生成的数据为例进行赋值。

    1
    2
    3
    4
    5
    6
    import numpy as np
    for i in range(100):
    temp=np.random.random((3,32,32))
    f['data'][i]=temp #写入data
    f['label'][i]=i%4 #写入label
    f.close()

以上,即可生成一个用于训练的train.hdf5文件。

3. 在torch中使用HDF5文件

在torch中读取HDF5文件需要用到torch-hdf5,可以参照官方文档来安装

1
2
3
require 'hdf5';
myFile=hdf5.open('path_to_hdf5_file','r') -- 读入HDF5文件
trainset={data=myFile:read('data'):all(),label=myFile:read('label'):all():byte()}

trainset是与官方tutorial读取’cifar10-train.t7’ 后同样的对象。

1
2
3
4
5
6
trainset --输入trainset并执行后可以看到trainset的信息如下
----------------执行输出的信息-------------------------------------------------

data : DoubleTensor - size: 100×3×32×32
label : ByteTensor -size: 100×1

按照上述的方法创建trainset和testset并读取数据之后,就接着可以进行训练了,由于内容不在本文范围内,所以略过。