Caffe:打印softmax分数

时间:2017-06-15 13:57:07

标签: deep-learning caffe

在Caffe安装中的MNIST的给定示例中。

对于任何给定的测试图像,如何获得每个类别的softmax分数并对它们进行一些处理?比如计算它们的均值和方差。

我是新手,所以细节会帮助我很多。我能够训练模型并使用测试功能来获得预测,但我不确定要编辑哪些文件以获得上述结果。

2 个答案:

答案 0 :(得分:0)

您可以使用python接口

import caffe
net = caffe.Net('/path/to/deploy.prototxt', '/path/to/weights.caffemodel', caffe.TEST)
in_ = read_data(...) # this is up to you to read a sample and convert it to numpy array
out_ = net.forward(data=in_) # assuming your net expects "data" in blob

现在,您可以在字典out中获得网络的输出(键是输出blob的名称)。您可以在几个示例等循环中运行它。

答案 1 :(得分:0)

我可以尝试回答你的问题。假设在部署网络中,softmax层如下所示:

layer {
  name: "prob"
  type : "Softmax"
  bottom: "fc6"
  top: "prob"
}

在处理数据的python代码中,结合@Shai提供的代码,您可以通过添加基于@ Shai代码的代码来获取每个类别的概率:

predicted_prob = net.blobs['prob'].data

predict_prob将返回一个包含所有类别概率的数组。

例如,如果您只有两个类别,predicted_prob[0][0]将是此测试数据属于一个类别的概率,而predicted_prob[0][1]将是另一个类别的概率。

PS:

根据https://github.com/BVLC/caffe/tree/master/examples/mnist,如果您不想编写任何其他python脚本 它说这个例子将自动每500次迭代进行一次测试。解算器中定义了“500”,例如https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_solver.prototxt

因此,您需要追溯处理解算器文件的caffe源代码。我想它应该是https://github.com/BVLC/caffe/blob/master/src/caffe/solver.cpp

我不确定solver.cpp是您需要查看的正确文件。但是在这个文件中,你可以看到它具有测试和计算某些值的功能。如果没有其他人可以回答你的问题,我希望它可以给你一些想法。