如何获得caffe模型中的概率

时间:2017-08-07 15:25:11

标签: python caffe

我正在使用Squeezenet,最后几层看起来像这样,我不确定为了能够利用概率到底有什么改变,

layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "pool10"
  bottom: "label"
  top: "loss"
  #include {
  #  phase: TRAIN
  #}
}
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "pool10"
  bottom: "label"
  top: "accuracy"
  #include {
  #  phase: TEST
  #}
}
layer {
  name: "accuracy_top5"
  type: "Accuracy"
  bottom: "pool10"
  bottom: "label"
  top: "accuracy_top5"
  #include {
  #  phase: TEST
  #}
  accuracy_param {
    top_k: 5
  }
} 

我如何获得概率而不是二进制输出? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

在python中你可以做这种形式的事情:

    caffe.set_mode_gpu()    
    net = caffe.Net('path/to/deploy.prototxt', 'path/to/mode.caffemodel',caffe.TEST)

    for image in images:

        im = np.array(caffe.io.load_image(image))
        im = np.array(im,dtype=np.float32)
        im = im.transpose(2,0,1)
        net.blobs['data'].reshape(1,*im.shape)
        net.blobs['data'].data[...] = im
        net.forward()
        print(net.blobs['prob'].data)

为了更深入地了解caffe网络手术的代码片段和其他有用功能,我推荐这个link

答案 1 :(得分:1)

您缺少的是"Softmax"图层,可将您的预测“转换”为每类概率

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

请注意,您的损失层"SoftmaxWithLoss"在内部执行相同的概率计算(理论上,您可能会将这些概率作为损失层的第二个顶部,但是对于某些原因我从未设法成功工作。PR #5828 假设让它工作)