"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()。你可以试试这个。
我在 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()。你可以试试这个。