在Caffe安装中的MNIST的给定示例中。
对于任何给定的测试图像,如何获得每个类别的softmax分数并对它们进行一些处理?比如计算它们的均值和方差。
我是新手,所以细节会帮助我很多。我能够训练模型并使用测试功能来获得预测,但我不确定要编辑哪些文件以获得上述结果。
答案 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是您需要查看的正确文件。但是在这个文件中,你可以看到它具有测试和计算某些值的功能。如果没有其他人可以回答你的问题,我希望它可以给你一些想法。