"Euclidean loss layer" 中的负输出值

Negative output value in "Euclidean loss layer"

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

负值可能是什么原因?

首先,你好像用错了blob。 prototxt 中定义的网络产生两个输出 blob:一个是 cross_entropy_loss,另一个是 l2_error。所以 net_->output_blobs()[0] 可能是 blob 'cross_entropy_loss'。第二,'const float* end = begin + output_layer->channels()' 的说法好像不对。如果你想打印批量图像的所有损失,你应该使用 output_layer->num()。你可以试试这个。