如何在Caffe中获取二分类器的两个输出值(针对两个类别)?

我正在尝试使用LeNet网络作为二分类器(是,否)。测试配置文件中的第一层和最后几层如下所示:

    layer {      name: "data"      type: "ImageData"      top: "data"      top: "label"      include {        phase: TEST      }      transform_param {        scale: 0.00390625      }      image_data_param {        source: "examples/my_example/test_images_labels.txt"        batch_size: 1        new_height: 128        new_width: 128      }    }...    layer {      name: "ip2"      type: "InnerProduct"      bottom: "ip1"      top: "ip2"      param {        lr_mult: 1      }      param {        lr_mult: 2      }      inner_product_param {        num_output: 2        weight_filler {          type: "xavier"        }        bias_filler {          type: "constant"        }      }    }    layer {      name: "accuracy"      type: "Accuracy"      bottom: "ip2"      bottom: "label"      top: "accuracy"    }    layer {      name: "loss"      type: "SoftmaxWithLoss"      bottom: "ip2"      bottom: "label"      top: "loss"    }

在测试时,我设置了batch_size=1,因此我使用以下命令运行测试:

./build/tools/caffe test -model examples/my_example/lenet_test.prototxt -weights=examples/my_example/lenet_iter_528.caffemodel -iterations 200

我的目的是能够单独分析每张测试图像的结果。目前,每次迭代我得到以下信息:

I0310 18:30:21.889688  5952 caffe.cpp:264] Batch 41, accuracy = 1I0310 18:30:21.889739  5952 caffe.cpp:264] Batch 41, loss = 0.578524

然而,由于我的网络有两个输出,我希望在测试时看到每个输出的两个独立值:一个用于类别“0”(“否”),另一个用于类别“1”(“是”)。应该类似于以下内容:

Batch 41, class 0 output: 0.755Batch 41, class 1 output: 0.201

我应该如何修改测试配置文件来实现这一点?


回答:

你想看到"Softmax"的概率输出(不仅仅是损失)。
为此,你可以尝试使用"SoftmaxWithLoss"并添加两个"top"(我不确定这个选项是否完全功能/支持):

layer {  name: "loss"  type: "SoftmaxWithLoss"  bottom: "ip2"  bottom: "label"  top: "loss"  top: "prob" # 添加类别概率输出}

或者,如果前面的解决方案不起作用,明确添加一个"Softmax"层:

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注