如何使用1-dim向量作为caffe的输入?

时间:2015-06-22 14:56:19

标签: caffe

我想在我自己的1-dim数据上训练神经网络(NN),我将其存储在hdf5数据库中以供caffe使用。根据文件,这应该工作。它也适用于我,因为我只使用"完全连接的层"," Relu"和" Dropout"。但是,当我尝试使用" Convolution"和#34; Max Pooling" NN架构中的层。该错误引发了数据的输入维度。

I0622 16:44:20.456007  9513 net.cpp:84] Creating Layer conv1
I0622 16:44:20.456015  9513 net.cpp:380] conv1 <- data
I0622 16:44:20.456048  9513 net.cpp:338] conv1 -> conv1
I0622 16:44:20.456061  9513 net.cpp:113] Setting up conv1
F0622 16:44:20.456487  9513 blob.cpp:28] Check failed: shape[i] >= 0 (-9 vs. 0) 

当我只想使用&#34; Pooling&#34;这是错误。 &#34; InnerProduct&#34;图层:

I0622 16:52:44.328660  9585 net.cpp:338] pool1 -> pool1
I0622 16:52:44.328666  9585 net.cpp:113] Setting up pool1
F0622 16:52:44.328680  9585 pooling_layer.cpp:84] Check failed: 4 == bottom[0]->num_axes() (4 vs. 2) Input must have 4 axes, corresponding to (num, channels, height, width)

但是,我不知道如何更改输入尺寸以使其有效。 这是我的prototxt文件的开头,指定了网络架构:

name: "LeNet"
layer {
  name: "myNet"
  type: "HDF5Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  hdf5_data_param {
    source: "/path/to/my/data/train.txt"
    batch_size: 200
  }
}

layer {
  name: "myNet"
  type: "HDF5Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  hdf5_data_param {
    source: "/path/to/my/data/test.txt"
    batch_size: 200
  }
}

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 1
    kernel_h: 11
    kernel_w: 1    
    stride: 1
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "conv1"
  top: "conv1"
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_h: 3
    kernel_w: 1
    stride: 2
  }
}

这就是我使用Matlabs h5write函数输出我的4D数据库(有两个单例维度)的方法:

h5create('train.h5','/data',[dimFeats 1 1 numSamplesTrain]);
h5write('train.h5','/data', traindata); 

2 个答案:

答案 0 :(得分:1)

您似乎使用错误的形状输出数据。 Caffe blob的尺寸为(n_samples, n_channels, height, width)

除此之外,您的原型文件似乎可以根据一维输入进行预测。

答案 1 :(得分:0)

由于我没有在Matlab中使用h5createh5write的经验,因此我不确定是否使用您希望生成的维度生成训练数据集。

卷积层的错误消息称为shape[i] = -9。这意味着批次中的宽度,高度,通道或图像数量都设置为-9。

单独使用池化层时的错误信息表示,当网络期望输入4D时,网络只能检测到2D输入。

两个层中的错误消息都与重塑blob有关,这清楚地表明输入的尺寸不符合预期。

尝试调试blob.cpp&amp;中存在的重塑函数。 layers / pooling_layer.cpp可以深入了解哪个值实际上是流氓。