- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
(已添加对此问题的更新。)
我是比利时根特大学的研究生;我的研究是关于深度卷积神经网络的情绪识别。我正在使用 Caffe实现 CNN 的框架。
最近我遇到了一个关于类(class)不平衡的问题。我正在使用大约 9216 个训练样本。 5% 标记为阳性 (1),其余样本标记为阴性 (0)。
我正在使用 SigmoidCrossEntropyLoss层来计算损失。训练时,即使经过几个 epoch,损失也会减少,准确率非常高。这是由于不平衡造成的:网络总是简单地预测负数(0)。 (准确率和召回率都为零,支持这一说法)
为了解决这个问题,我想根据预测-真值组合来衡量对损失的贡献(严厉惩罚假阴性)。我的导师/教练还建议我在通过随机梯度下降 (sgd) 进行反向传播时使用比例因子:该因子与批处理中的不平衡有关。仅包含负样本的批处理根本不会更新权重。
我只为 Caffe 添加了一个定制层:用于报告其他指标,例如准确率和召回率。我对 Caffe 代码的经验有限,但我在编写 C++ 代码方面拥有丰富的专业知识。
任何人都可以帮助我或为我指出如何调整 SigmoidCrossEntropyLoss 的正确方向和 Sigmoid层以适应以下变化:
提前致谢!
我已经合并了 InfogainLossLayer根据 Shai 的建议。我还添加了另一个自定义层,它根据当前批处理中的不平衡构建信息增益矩阵 H
。
目前,矩阵配置如下:
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)
我计划在未来尝试不同的矩阵配置。
我已经在 10:1 的不平衡情况下对此进行了测试。结果表明网络现在正在学习有用的东西:(30 epochs 后的结果)
这些数字是在大约 20 个 epoch 时达到的,之后没有显着变化。
!!上述结果只是一个概念证明,它们是通过在 10:1 不平衡数据集上训练一个简单的网络获得的。 !!
最佳答案
你为什么不使用 InfogainLoss层来补偿训练集中的不平衡?
Infogain 损失是使用权重矩阵 H
定义的(在您的情况下为 2×2)其条目的含义是
[cost of predicting 1 when gt is 0, cost of predicting 0 when gt is 0
cost of predicting 1 when gt is 1, cost of predicting 0 when gt is 1]
所以,你可以设置H
的条目来反射(reflect)预测0或1的错误之间的差异。
您可以在 this thread 中找到如何为 caffe 定义矩阵 H
.
关于样本权重,您可能会发现 this post有趣:它展示了如何修改 SoftmaxWithLoss 层以考虑样本权重。
最近,Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, Piotr Dollár Focal Loss for Dense Object Detection, (ICCV 2017) 提出了对交叉熵损失的修改。 .
焦点损失背后的想法是根据预测该示例的相对难度(而不是基于类(class)规模等)为每个示例分配不同的权重。从我开始试验这种损失的短暂时间开始,感觉它优于具有类大小权重的 "InfogainLoss"
。
关于c++ - 解决类不平衡 : scaling contribution to loss and sgd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30486033/
我正在尝试在 View 中同时使用 scalegesture 监听器和 gesturelistener。如果比例为 1,则一切正常,但如果将比例设置为其他值,图像会跳到一个新位置,然后平滑缩放。 我的
我在使用 Canvas 和 canvas.scale(Scale, Scale) 时遇到图像质量问题;它们看起来完全像下面这样: android:运行时调整大小的图像质量 我相信我已经阅读了所有关于调
我有一个使用 svg 过滤器附加阴影的 svg 图形。我需要缩放阴影,但找不到可以执行此操作的过滤器。有谁知道这是否可能?
我正在构建一个逻辑回归分类器。 我从一组 500.000 条记录开始,我只想使用其中的一个样本。 你有什么建议: 1) 缩放总体然后采样2)缩放样本3) 仅缩放样本的 X_TRAIN 分割? 为什么?
我有一个功能,我用它在鼠标进入时放大图片并在鼠标离开时返回到正常大小。问题是,如果我在允许图片返回正常大小之前快速将鼠标移出然后将鼠标移入,那么图片将从鼠标输入时当前的任何大小放大(x2.7) (并且
可以在 scale-y-2 中使用 zoomtovalues 吗?我在多个 y 轴上有几个系列,我想将每个 scale-y-n 缩放到特定值,但我不知道如何... 谢谢和问候, 最佳答案 我们在最近的
我正在尝试在 Android 中创建(我认为是)一个相对简单的动画。也就是说,我想让某个 TextView 在单击按钮时缩小到 0 并返回到 1。当我单击该按钮时实际发生的是 TextView 立即缩
我有一个元素需要缩放到父元素的 100%。因为该元素包含基于像素的动画和可以缩放的图像,所以我不能使用百分比。有没有办法使用 css transform scale 来做到这一点? 最佳答案 相对 c
我在 ChartJS 中遇到一个奇怪的错误并且不知道如何修复它,由于这个错误我无法更改比例的任何内容。 我的代码(Sensor.tsx): import { useParams } from "sol
我有一些数据,我正试图通过不断增加的分母来准确和精确地处理这些数据。 请假设分子总是有小数。 我在 docs 中看到divide(BigDecimal divisor) 实际上会减小比例,这看起来很奇
喂, https://jsfiddle.net/jbwq6y87/7/ #box { width: 500px; height: 500px; transition: 0.5s; ov
几个 Tk 小部件也存在于 Ttk 版本中。通常它们具有相同的一般行为,但使用“样式”和“主题”而不是每个实例的外观属性(例如 bg 等)。这很好,因为 Ttk 小部件默认采用操作系统窗口管理器的“标
我尝试转换视频并使用 scale=-1:720 调整其大小,但出现错误“宽度不能被 2 整除”。我解决了这个问题:scale=-2:720。 之间有什么区别 scale=-1:720 和 scale=
我正在尝试重新创建此 codepen变换:我网站上特定页面的缩放转换,但它没有按预期工作 - 正如您在此代码片段中看到的那样(在整页上查看) - 图像覆盖/覆盖不足和不稳定而不是平滑。 /* Part
我有 3 个 Scale 小部件 scale1、scale2 和 scale3。我想使用 scale1 按以下方式控制 scale2 和 scale3 的值: 我不希望 scale2 和 scale3
我目前正在将我的数据分析从 R 转移到 Python。在 R 中缩放数据集时,我会使用 R.scale(),据我所知,它会执行以下操作:(x-mean(x))/sd(x) 为了替换该函数,我尝试使用
从文档中,定义为: 量化 ..a variant of linear scales with a discrete rather than continuous range. The input do
我有一个时基折线图,我正在尝试获取点击坐标处每个刻度的值。 我在 ChartJS 选项中指定的 onClick 函数: onClick: function(event, elementsAtEvent
我见过这样写的代码: ,但我也看到过这样写的代码: initial-scale=1 和 initial-scale=1.0 有区别吗? 最佳答案 没有。 specification描述视口(viewp
给定 y 轴 (s) 上的缩放和 x 轴 (t) 上的平移参数,当目的是最大化曲线叠加(而不是最小化距离)时,如何缩放和对齐两条不重合的曲线? 正如 @DWin 所指出的,这可能会被重新命名为“如何使
我是一名优秀的程序员,十分优秀!