Caffe中的多类别分类

Aid*_*mez 14 neural-network deep-learning caffe matcaffe pycaffe

我想我们可能能够编译一些执行多类别分类的方法的含咖啡因的描述.

通过多类别分类,我的意思是:输入数据包含多个模型输出类别的表示和/或简单地在多个模型输出类别下可分类.

例如,包含猫和狗的图像将为猫和狗预测类别输出(理想地)~1,对于所有其他类别输出~0.

  1. 基于这篇论文,这个陈旧而封闭的PR这个开放的公关,似乎caffe完全有能力接受标签.它是否正确?

  2. 这种网络的构建是否需要使用多个神经元(内积 - > relu - >内积)和softmax层,如本文第13页所述 ; 或者Caffe的ip&softmax目前是否支持多种标签尺寸?

  3. 当我将标签传递给网络时,示例将说明正确的方法(如果不是两者)?:

    例如猫吃苹果注意:Python语法,但我使用c ++源代码.

    第0列 - 类输入; 第1列 - 类不在输入中

    [[1,0],  # Apple
     [0,1],  # Baseball
     [1,0],  # Cat
     [0,1]]  # Dog
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    第0列 - 类在输入中

    [[1],  # Apple
     [0],  # Baseball
     [1],  # Cat
     [0]]  # Dog
    
    Run Code Online (Sandbox Code Playgroud)

如果有什么不清楚,请告诉我,我将生成我想问的问题的图片示例.

Sha*_*hai 9

好问题.我相信这里没有单一的"规范"答案,你可能会找到几种不同的方法来解决这个问题.我会尽力展示一种可能的方式.它与您提出的问题略有不同,因此我将重新陈述问题并提出解决方案.

问题:给定输入图像和一组C类,指示每个类是否在图像中描绘.

输入:在训练时间内,输入是图像对和一C二进制矢量,指示每个类的C类别(如果它存在于图像中).

输出:给定图像,输出C-dim二进制向量(与问题中建议的第二种形式相同).

让caffe完成工作:为了完成这项工作,我们需要使用不同的损失来修改网络的顶层.
但首先,让我们了解使用caffe的常用方法,然后查看所需的更改.
事物现在的方式:图像被送入网络,经过转换/汇集/ ...层,最后通过输出"InnerProduct"C.这些C预测进入了一个"Softmax"层,它抑制除了最主要的类之外的所有类.一旦突出显示单个类,"SoftmaxWithLoss"图层将检查突出显示的预测类是否与基础事实类匹配.

你需要什么:现有方法的问题是"Softmax"基本上选择单个类的层.我建议你替换用它"Sigmoid"映射层的每个所述的C输出变换成一个指示符这个特定的类是否存在在图像中.对于培训,您应该使用"SigmoidCrossEntropyLoss"而不是"SoftmaxWithloss"图层.

  • @ user570593使用sigmoidcrossentropyloss进行训练,使用sigmoid进行deplo (2认同)