【问题标题】:Creating multilabel HDF5 file for caffe为 caffe 创建多标签 HDF5 文件
【发布时间】:2017-02-15 14:58:33
【问题描述】:

我使用以下 python 脚本创建了 HDF5 数据并放置了 HDF5 数据层。但是,当我尝试使用这些数据训练 caffe 时,它​​一直在抱怨

Check failed: num_spatial_axes_ == 2 (0 vs. 2) kernel_h & kernel_w can only be used for 2D convolution

我的数据如下所示:

  1. 数据(1x3253),标签(1x128)二进制。我将 128 切成 16 个字节并将其转换为 dec 以将其用作多标签。所以一个典型的键看起来像 (20, 38, 123, 345,...) 1x16。我有 1,000,000 个像 (1) 这样的数据。现在我只使用第一个字节,所以我将使用一个整数作为标签。

        DIR ="/x/"
        h5_fn= os.path.join('/x/h5Data_train.h5')
        from numpy import genfromtxt  
    
        dim=64000 
        InputData=np.arange(3253)
        data=np.arange(dim*3253)
        data.shape=(dim,3253)
    
        fileList=[os.path.join(i) for folder, subdir,files in os.walk(DIR) for i in files]
        for i in range(0,len(fileList)):
             InputData=np.genfromtxt(DIR+fileList[i], delimiter=',',skip_header=24)
             data[i]=InputData
    
        label=np.arange(dim)
        labelData=np.genfromtxt(DIR+'label_file',comments='\t',dtype=None)
    
        for i in range(0,dim):
            label[i]=int(labelData[i][0:2],16)
    
        print "Creating HDF5..."
    
        with h5py.File(h5_fn,'w') as f:
           f['InputData']=data
           f['label']=label
    
        text_fn=os.path.join('/x/hdf5.txt')
        with open(text_fn,'w') as f:
           f.write('h5_fn')
    

此脚本创建 HDF5,但我怀疑来自 caffe 的错误与我创建 HDF5 文件的方式有关。有人可以告诉我我创建 HDF5 的方式是否有任何问题。另外,有没有人可以检查创建的 HDF5 文件是否符合您的要求?谢谢!

【问题讨论】:

  • 你的缩进太错误了,很难猜出嵌套在哪里。请解决这个问题。缩进对于 Python 来说真的很重要。
  • 顺便说一句,你可以用HDFView阅读你的HDF的内容
  • @zvone 现在应该更好了。我的实际代码是正确缩进的,这里的代码块不是那么灵活。

标签: python machine-learning deep-learning caffe hdf5


【解决方案1】:

问题:

默认情况下,Caffe 期望其数据为 4D:batch_size -by- channel -by- height -by-width。
在您的model 中,您假设每个样本的形状为 1×1×3253,即:您的数据是 1D,只有非单件宽度尺寸。这是一个重要的细节,因为您沿宽度维度应用卷积。
另一方面,您的 HDF5 数据仅为 2D,caffe 将其解释为具有 3253 个宽度和高度为 1 的 通道dim 示例。
现在你可以理解你得到的错误信息了:你有一个带有kernel_widthkernel_height 参数的卷积层,但是数据(据caffe 理解)的宽度和高度为1。

解决办法:

你只需要reshape你的data

data.shape=(dim,1,1,3253)

现在data 有 1 个通道,每个样本的高度为 1,宽度为 3253。


PS,
您正在向'/x/hdf5.txt' 写入实际的字符串 'h5_fn',而不是变量h5_fn 中的字符串...

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2017-03-07
    • 2017-04-22
    • 2016-12-13
    • 2016-07-31
    • 2017-03-19
    • 2018-02-08
    • 2016-02-19
    相关资源
    最近更新 更多