我可以尝试回答你的问题。假设在部署网络时,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] 将是另一个的概率。
predicted_prob[0][0]
predicted_prob[0][1]
PS:
如果你不想写任何额外的python脚本,根据 https://github.com/BVLC/caffe/tree/master/examples/mnist 它说这个例子将自动每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是你需要查看的正确文件。但是在这个文件中,你可以看到它具有测试和计算某些值的功能。如果没有其他人可以回答你的问题,我希望它可以给你一些想法。
你可以使用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的名称)。您可以在几个示例等循环中运行它。
out