我有10-d标签向量的数据,我想使用caffe模型以10-d输出对这些数据进行回归。但是现在,我只想检查一些输出的丢失(例如,10-d矢量的1,3,4,5,6-d),所以我在最后一个底部定义了一个5-d输出的层。输出层,但我不知道如何获得相应的5-d标签向量groundtruth,我想可能是我可以定义一个常量层来指示我想要的条目。如果您有任何想法,请帮助我。
更新:示例
这是我原来的InnerProduct and Loss图层
layer {
name: "score"
type: "InnerProduct"
bottom: "fc7"
top: "score"
inner_product_param {
num_output: 10
weight_filler {
type: "gaussian"
std: 0.005
}
bias_filler {
type: "constant"
value: 1
}
}
}
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "score"
bottom: "label"
top: "loss"
include {
phase: TRAIN
}
}
我更关心$ n_1 $(如1,3,4,5,6)10维输出的条目及其丢失,所以我想获取这些条目的丢失,比如
layer {
name: "score1"
type: "InnerProduct"
bottom: "fc7"
top: "score1"
inner_product_param {
num_output: 5 # n_1
weight_filler {
type: "gaussian"
std: 0.005
}
bias_filler {
type: "constant"
value: 1
}
}
}
layer {
name: "loss1"
type: "EuclideanLoss"
bottom: "score1"
bottom: "label"
top: "loss1"
include {
phase: TRAIN
}
}
如何直接从得分中获得得分1?
答案 0 :(得分:0)
根据我对你的问题的解释,我认为你想计算输出层的损失w.r.t回归模型的标签。但是你不想把这些标签带到等式中。
如果我的解释是真的,作为一个回归模型,我期待你的新图层与EuclidieanLayer类似。如果是这样,则图层中的caffe_sub
函数可以替换为以下代码段。
int arrayPos[5] = {1,3,4,5,6};
int count = 5;
Dtype *newBottom0=(Dtype*)malloc(sizeof(Dtype)*count);
Dtype *newBottom1=(Dtype*)malloc(sizeof(Dtype)*count);
for(int varI=0; varI<count; varI++)
{
newBottom0[varI] = (Dtype) bottom[0]->cpu_data()[arrayPos[varI]];
newBottom1[varI] = (Dtype) bottom[1]->cpu_data()[arrayPos[varI]];
}
caffe_sub( count, newBottom0, newBottom1, diff_.mutable_cpu_data());
free(newBottom0);
free(newBottom1);