python - 为 caffe 创建多标签 HDF5 文件

标签 python machine-learning deep-learning caffe hdf5

我使用以下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 以将其用作多标签。因此,典型的 key 看起来像 (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 文件是否符合您的要求?谢谢!

最佳答案

问题:

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

解决方案:

您只需 reshape 您的数据:

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

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

<小时/>

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

关于python - 为 caffe 创建多标签 HDF5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39903197/

相关文章:

python - Keras:EarlyStopping 保存最佳模型

machine-learning - 哪种预训练模型最适合灾难分类

python - 如何通过向交叉熵添加负熵来创建自定义损失函数?

Python txt文件标签解析

python - 如何使用 Pandas 日期时间对象系列作为独立值 (x) 运行 OLS 回归

python - 如何使用二次回归?

用于分类的深度置信网络的 Matlab 示例代码

python - 如何在 python 中使用多个索引同时填充 numpy 数组

python - 重新连接列表中特定的分割字符串 PYTHON

python - cross_val_score 和 StratifiedKFold 给出不同的结果