2017-08-07 61 views
1

我使用Squeezenet,最后几层这个样子,我不是很确定到底是什么改变了我能够利用现有的概率,如何获得朱古力模型probabilties

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 
    } 
} 

我该怎么办获得概率而不是二进制输出? 在此先感谢。

+0

你没有得到这些层二进制输出,而是标量的损失和准确性 – Shai

回答

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) 

对于更多,我建议这个link

+0

感谢Harjatin的解决方案,但我有一个sil Ÿ问题,我不完全确定如何利用您的代码,更确切地说,我应该不更改上面提供的图层中的任何内容,并使用您在网络后提供的脚本。我有点困惑! – Ryan

+0

@Ryan在您的prototxt文件中进行Shai推荐的更改,然后使用我的代码。这应该够了吧。 – Harjatin

1

你所缺少的是一个"Softmax"层,你的预言“转换”成每级概率

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

请注意,您的损失层,"SoftmaxWithLoss"做到这一点非常相同的概率计算内部(从理论上讲,你可能会得到这些概率为损失层的第二顶部,但some.e原因,我从来没有设法使其工作。PR #5828假设,使其工作)