我在caffe中的EuclideanLoss
图层中获得了负输出值。
我正在使用以下prototxt文件:
examples/mnist/mnist_autoencoder.prototxt
最后3层如下:
layer {
name: "loss"
type: "SigmoidCrossEntropyLoss"
bottom: "decode1"
bottom: "flatdata"
top: "cross_entropy_loss"
loss_weight: 1
}
layer {
name: "decode1neuron"
type: "Sigmoid"
bottom: "decode1"
top: "decode1neuron"
}
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "decode1neuron"
bottom: "flatdata"
top: "l2_error"
loss_weight: 0
}
由于最终的图层类型是EuclideanLoss
,我期待一个正值。但有时层输出是负面的。
net_->Forward();
Blob<float>* output_layer = net_->output_blobs()[0];
const float* begin = output_layer->cpu_data();
const float* end = begin + output_layer->channels();
std::vector<float> output = std::vector<float>(begin, end);
for (int i=0; (int)i<output.size(); i++)
std::cout << "Error value: " << output [i] << std::endl;
负值可能是什么原因?
答案 0 :(得分:0)
首先,您似乎使用了错误的blob。原型文件中定义的网络产生两个输出blob:一个是cross_entropy_loss,另一个是l2_error。所以net _-&gt; output_blobs()[0]可能是blob'ross_entropy_loss'。其次,'const float * end = begin + output_layer-&gt; channels()'语句似乎错了。如果您想打印批量图像的所有损失,您应该使用output_layer-&gt; num()。你可以试试这个。