如何使用 1-dim 向量作为 caffe 的输入?
How to use 1-dim vector as input for caffe?
我想在我自己的 1-dim 数据上训练神经网络 (NN),我将这些数据存储在用于 caffe 的 hdf5 数据库中。根据文档,这应该有效。就我只使用 "Fully Connected Layers"、"Relu" 和 "Dropout" 而言,它也适用于我。但是,当我尝试在 NN 架构中使用 "Convolution" 和 "Max Pooling" 层时出现错误。该错误抱怨数据的输入维度。
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)
这是我只想在 "InnerProduct" 层后面使用 "Pooling" 层时的错误:
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);
由于我没有在 Matlab 中使用 h5create
和 h5write
的经验,我不确定生成的训练数据集是否具有您期望它生成的维度。
卷积层的错误消息说 shape[i] = -9
。这意味着批处理中的图像宽度、高度、通道或数量被设置为 -9。
单独使用池化层时的错误消息说网络只能检测到 2D 输入,而网络期望 4D 输入。
两个层中的错误消息都与重塑斑点有关,这清楚地表明输入的尺寸与预期不符。
尝试调试 blob.cpp & layers/pooling_layer.cpp 中存在的 Reshape 函数,以深入了解哪个值实际上是流氓。
您输出的数据似乎使用了错误的形状。 Caffe blob 的尺寸为 (n_samples, n_channels, height, width)
.
除此之外,您的 prototxt 似乎适合基于一维输入进行预测。
我想在我自己的 1-dim 数据上训练神经网络 (NN),我将这些数据存储在用于 caffe 的 hdf5 数据库中。根据文档,这应该有效。就我只使用 "Fully Connected Layers"、"Relu" 和 "Dropout" 而言,它也适用于我。但是,当我尝试在 NN 架构中使用 "Convolution" 和 "Max Pooling" 层时出现错误。该错误抱怨数据的输入维度。
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)
这是我只想在 "InnerProduct" 层后面使用 "Pooling" 层时的错误:
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);
由于我没有在 Matlab 中使用 h5create
和 h5write
的经验,我不确定生成的训练数据集是否具有您期望它生成的维度。
卷积层的错误消息说 shape[i] = -9
。这意味着批处理中的图像宽度、高度、通道或数量被设置为 -9。
单独使用池化层时的错误消息说网络只能检测到 2D 输入,而网络期望 4D 输入。
两个层中的错误消息都与重塑斑点有关,这清楚地表明输入的尺寸与预期不符。
尝试调试 blob.cpp & layers/pooling_layer.cpp 中存在的 Reshape 函数,以深入了解哪个值实际上是流氓。
您输出的数据似乎使用了错误的形状。 Caffe blob 的尺寸为 (n_samples, n_channels, height, width)
.
除此之外,您的 prototxt 似乎适合基于一维输入进行预测。