“欧几里德损失层”中的负输出值

时间:2018-03-23 09:40:16

标签: caffe

我在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;

负值可能是什么原因?

1 个答案:

答案 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()。你可以试试这个。