【问题标题】:PyCaffe output layer for testing binary classification model用于测试二元分类模型的 PyCaffe 输出层
【发布时间】:2017-03-21 19:46:06
【问题描述】:

我微调 vgg-16 以进行二元分类。我使用 sigmoidLoss 层作为损失函数。

为了测试模型,我编写了一个 python 文件,我在其中加载了带有图像的模型并使用以下命令获取输出:

out = net.forward()

我的疑问是我应该从 Sigmoid 层还是 SigmoidLoss 层获取输出。 以及2层有什么区别。

我的输出实际上是输入图像为 1 类的概率。**

【问题讨论】:

    标签: python deep-learning caffe convolution pycaffe


    【解决方案1】:

    为了对测试集进行预测,您可以通过修改原始 prototxt 来创建单独的部署 prototxt。

    以下是相同的步骤

    • 删除用于训练的数据层,因为在分类的情况下,我们不再为我们的数据提供标签。
    • 删除任何依赖于数据标签的层。
    • 设置网络以接受数据。
    • 让网络输出结果。

    您可以在此处阅读更多信息:deploy prototxt

    否则,您可以添加
    包括 { 阶段:训练 }

    到您的 SigmoidWithLoss 层,以便在测试网络时不使用它。要进行预测,只需检查 Sigmoid 层的输出即可。

    【讨论】:

      【解决方案2】:

      SigmoidWithLoss 层每批次输出一个 单个 数字,表示相对于 ground truth 标签的损失。

      另一方面,Sigmoid 层为批次中的每个输入输出一个概率值。此输出需要计算地面实况标签。

      如果您正在寻找每个输入的概率,您应该查看Sigmoid 层的输出

      【讨论】:

      • SigmoidWithLoss 层的输出在测试期间代表什么,因为没有真实标签。
      • @ShivamDuggal 见this answer。没有基本事实,你不能拥有"SigmoidCrossEntropyLoss" 层。层必须有两个输入。
      猜你喜欢
      • 2020-12-20
      • 2020-10-01
      • 2019-06-11
      • 2020-03-12
      • 2016-09-19
      • 2017-10-14
      • 1970-01-01
      • 2020-07-20
      • 2020-12-20
      相关资源
      最近更新 更多