尝试在我自己的数据集上训练 LeNet。我从长一维矢量数据集生成了 HDF5 文件,并创建了 HDF5 数据层,如下所示:我对顶部 blob 的命名与生成 HDF5 时的命名相同。
name: "Test_net"
layer {
name: "data"
type: "HDF5Data"
top: "Inputdata"
top: "label"
hdf5_data_param {
source:"~/*_hdf5_train.txt"
batch_size: 32
}
include{phase: TRAIN}
}
layer {
name: "data2"
type: "HDF5Data"
top: "Inputdata"
top: "label"
hdf5_data_param {
source:"~/*_hdf5_test.txt"
batch_size: 32
}
include{phase: TEST}
}
layer {
name: "conv1"
type: "convolution"
bottom: "data"
top: "conv1"
param {lr_mult:1}
param {lr_mult:2}
convolution_param{
num_output: 20
kernel_h: 1
kernel_w: 5
stride_h: 1
stride_w: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "xavier"
}
}
}
layer {
name: "pool1"
type: "pooling"
bottom: "conv1"
top: "pool1"
pooling_param{
pool: MAX
kernel_h: 1
kernel_w: 2
stride_h: 1
stride_w: 2
}
}
# more layers here...
layer{
name: "loss"
type: "SigmoidCrossEntropyLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
但是当我尝试训练时出现以下错误insert_split.cpp
.
insert_splits.cpp:29] Unknown bottom blob 'data' (layer 'conv1', bottom index 0)
*** Check failure stack trace: ***
@ 0x7f19d7e735cd google::LogMessage::Fail()
@ 0x7f19d7e75433 google::LogMessage::SendToLog()
@ 0x7f19d7e7315b google::LogMessage::Flush()
@ 0x7f19d7e75e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f19d82684dc caffe::InsertSplits()
@ 0x7f19d8230d5e caffe::Net<>::Init()
@ 0x7f19d8233f21 caffe::Net<>::Net()
@ 0x7f19d829c68a caffe::Solver<>::InitTrainNet()
@ 0x7f19d829d9f7 caffe::Solver<>::Init()
@ 0x7f19d829dd9a caffe::Solver<>::Solver()
@ 0x7f19d8211683 caffe::Creator_SGDSolver<>()
@ 0x40a6c9 train()
@ 0x4071c0 main
@ 0x7f19d6dc8830 __libc_start_main
@ 0x4079e9 _start
@ (nil) (unknown)
Aborted (core dumped)
我做错了什么?
Cheers,
您的数据层输出两个“blob”:"label"
and "Inputdata"
. Your "conv1"
层期望作为输入名为“blob”"data"
。 Caffe 不知道你的意思"Inputdata"
and "data"
成为同一个斑点...
现在,由于您已经保存了 hdf5 文件"Inputdata"
名称,您不能在"HDF5Data"
层,你能做的就是改变"data"
to "Inputdata"
在“底部”"conv1"
layer.
PS,
你的损失层需要两个“底部”:ip2
and label
你忘了喂食。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)