Neural network Caffe中的多类别分类

Neural network Caffe中的多类别分类,neural-network,deep-learning,caffe,pycaffe,matcaffe,Neural Network,Deep Learning,Caffe,Pycaffe,Matcaffe,我想我们也许可以对一些进行多类别分类的方法编写一份含咖啡因的描述 通过多类别分类,我的意思是:包含多个模型输出类别表示的输入数据和/或仅可在多个模型输出类别下分类 例如,包含猫和狗的图像将输出(理想情况下)猫和狗预测类别~1,所有其他类别~0 基于,而且,caffe似乎完全有能力接受标签。这是正确的吗 这种网络的构建是否需要使用多个神经元(内积->relu->内积)和softmax层,如中所示;或者Caffe的ip和softmax目前是否支持多个标签尺寸 当我将我的标签传递给网络时,哪一个示例可

我想我们也许可以对一些进行多类别分类的方法编写一份含咖啡因的描述

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

例如,包含猫和狗的图像将输出(理想情况下)猫和狗预测类别~1,所有其他类别~0

  • 基于,而且,caffe似乎完全有能力接受标签。这是正确的吗

  • 这种网络的构建是否需要使用多个神经元(内积->relu->内积)和softmax层,如中所示;或者Caffe的ip和softmax目前是否支持多个标签尺寸

  • 当我将我的标签传递给网络时,哪一个示例可以说明正确的方法(如果不是两个)

    <强>例如猫吃苹果<强>注:Python语法,但我使用C++源。< /P> 第0列-类在输入中; 第1列-类不在输入中

    [[1,0],  # Apple
     [0,1],  # Baseball
     [1,0],  # Cat
     [0,1]]  # Dog
    

    列0-类在输入中

    [[1],  # Apple
     [0],  # Baseball
     [1],  # Cat
     [0]]  # Dog
    

  • 如果有任何不清晰的地方,请告诉我,我将生成我想问的问题的图片示例。好问题。我相信这里没有单一的“规范”答案,您可能会找到几种不同的方法来解决这个问题。我会尽我所能展示一种可能的方式。这与您提出的问题略有不同,因此我将重新说明问题并提出解决方案

    问题:给定一个输入图像和一组
    C
    类,为每个类指明是否在图像中描述

    输入:在训练时,输入是成对的图像和一个
    C
    -dim二进制向量,用于指示
    C
    类的每一类是否存在于图像中

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

    让caffe完成这项工作:为了完成这项工作,我们需要使用不同的损耗修改网络的顶层。
    但首先,让我们了解caffe的常用使用方式,然后了解所需的更改。
    现在的情况是:图像被送入网络,经过conv/pooling/。。。层,最后通过带有
    C
    输出的
    “InnerProduct”
    层。这些
    C
    预测进入一个
    的“Softmax”
    层,该层抑制除最主要的类以外的所有类。一旦突出显示单个类
    “SoftmaxWithLoss”
    层将检查突出显示的预测类是否与地面真相类匹配


    您需要的:现有方法的问题是基本上选择单个类的
    “Softmax”
    层。我建议您将其替换为一个层,该层将每个
    C
    输出映射到一个指示器中,以指示图像中是否存在该特定类。对于培训,您应该使用而不是“SoftmaxWithloss”层。

    ,因为一个图像可以有多个标签。最直观的方法是将此问题视为一个与C无关的二进制分类问题,其中C是不同类的总数。因此,很容易理解:

    添加一个“Sigmoid”层,该层将每个C输出映射到一个指示器中,以确定该特定类是否存在于图像中,并且应使用“SigmoidCrossEntropyLoss”而不是“SoftmaxWithloss”层。 损失是这些C型乙状结肠交叉变性的总和


    您是指每张图像有固定数量的标签,还是每张图像有不同数量的标签?也就是说,你会期望总是得到,比如说,2个标签,或者你会期望一些图像有2个标签,或者其他更多的标签吗?@Shai后者听起来是一个非常有趣的问题!但是在我的例子中,标签尺寸是固定的。IMO,
    Softmax
    基本上选择单个类的原因是因为
    Softmax
    将输出标准化为概率。但现在caffe似乎已经支持多标签版本的
    Softmax
    (如上所述)?如果是这样,那么多标签版本的
    Softmax
    的实际使用情况是什么?@mintaka您链接到的多标签Softmax与本例中允许多个类别不同。@mintaka这里的情况是一个输入可以标记为多个类。在这种情况下,标签是按像素进行的:即每个输入都是一个图像,图像中的每个像素都应该得到一个标签,但对于单个像素,它仍然是一个标签,没有任何像素可以标记为多个类。你看到区别了吗?谢谢Shai。我知道这里的帖子是在谈论多标签分类(即,一幅图像属于多个类别)。对不起,我没有把我的回答说清楚。以前,我以为没有多标签实现的
    SoftmaxWithLossLayer
    ,直到我看到那篇文章(在我上次回复中提到)。所以我想知道现在caffe中的SoftmaxWithLossLayer是否支持多标签分类?@user570593使用sigmoidcrossentropyloss进行训练,使用sigmoid进行挖掘当你说:添加
    sigmoid
    -层你是说首先是
    sigmoid
    -层,然后是
    sigmoidcrossentropyloss
    -层?这与
    train\u val.prototxt
    @Shai@kli\u nlpr有关