(已添加此问题的更新.)
我是比利时根特大学的研究生; 我的研究是用深度卷积神经网络进行情感识别.我正在使用Caffe框架来实现CNN.
最近我遇到了关于班级失衡的问题.我正在使用9216个训练样本,约 5%标记为阳性(1),其余样品标记为阴性(0).
我正在使用SigmoidCrossEntropyLoss图层来计算损失.在训练时,即使在几个时期之后,损失也会减少并且准确度非常高.这是由于不平衡:网络总是预测为负(0).(精确度和召回率均为零,支持此声明)
为了解决这个问题,我想根据预测 - 真值组合来衡量对损失的贡献(严厉惩罚假阴性).我的导师/教练还建议我在通过随机梯度下降(sgd)反向传播时使用比例因子:该因子将与批次中的不平衡相关联.仅包含负样本的批次根本不会更新权重.
我只向Caffe添加了一个自定义图层:报告其他指标,如精度和召回.我对Caffe代码的经验有限,但我有很多编写C++代码的专业知识.
任何人都可以帮助我或指出我如何调整SigmoidCrossEntropyLoss和Sigmoid层以适应以下变化:
提前致谢!
我按照Shai的建议加入了InfogainLossLayer.我还添加了另一个自定义层,H根据当前批次中的不平衡构建了infogain矩阵.
目前,矩阵配置如下:
H(i, j) = 0 if i != j
H(i, j) = 1 - f(i) if i == j (with f(i) = the frequency of class i in the batch)
Run Code Online (Sandbox Code Playgroud)
我计划将来为矩阵试验不同的配置.
我已经用10:1的不平衡测试了这个.结果表明网络现在正在学习有用的东西:( 30个时期后的结果)
我想我们可能能够编译一些执行多类别分类的方法的含咖啡因的描述.
通过多类别分类,我的意思是:输入数据包含多个模型输出类别的表示和/或简单地在多个模型输出类别下可分类.
例如,包含猫和狗的图像将为猫和狗预测类别输出(理想地)~1,对于所有其他类别输出~0.
基于这篇论文,这个陈旧而封闭的PR和这个开放的公关,似乎caffe完全有能力接受标签.它是否正确?
这种网络的构建是否需要使用多个神经元(内积 - > relu - >内积)和softmax层,如本文第13页所述 ; 或者Caffe的ip&softmax目前是否支持多种标签尺寸?
当我将标签传递给网络时,示例将说明正确的方法(如果不是两者)?:
例如猫吃苹果注意: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)如果有什么不清楚,请告诉我,我将生成我想问的问题的图片示例.