deep-learning - 解决Caffe中不平衡的类成员: weight contribution of each instance to loss value

标签 deep-learning caffe pycaffe matcaffe

我有一个高度不平衡的数据,我知道有些用户建议使用InfoGainLoss loss function但是,当我尝试将此函数添加到 Caffe 层 时,我遇到了一些错误。
我有以下问题,如果有人指导我,我非常感激:

  1. 如何将此层添加到 Caffe 中?有谁知道这一层的任何来源/代码吗?
  2. 我想将其应用于图像分割,并且某些类别的比例有所不同。如何为我的图像创建 H 矩阵(一堆权重)? infoGainLoss 层如何读取与该特定图像相关的特定权重矩阵 (H)?
  3. 将 InforGainLoss 层的 cppcu 版本添加到 caffe 后,我应该重新制作 Caffe 吗?

很抱歉问了几个问题,但所有问题都是我关心的并且相互关联。我将很感激得到一些帮助和支持。 谢谢

最佳答案

1.如果您从当前的 infogain_loss_layer.cpp 复制,您可以轻松适应。对于前向传播,将第 59-66 行更改为:

// assuming num = batch size, dim = label size, image_dim = image height * width
Dtype loss = 0;
for (int i = 0; i < num; ++i) {
  for(int k = 0; k < image_dim; k++) {
    int label = static_cast<int>(bottom_label[i*image_dim+k]);
    for (int j = 0; j < dim; ++j) {
      Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
      loss -= infogain_mat[label * dim + j] * log(prob);
    }
  }
}

类似地,对于向后传递,您可以更改第 95-101 行,如下所示:

for (int i = 0; i < num; ++i) {
  for(int k = 0; k < image_dim; k++) {
    const int label = static_cast<int>(bottom_label[i*image_dim+k]);
    for (int j = 0; j < dim; ++j) {
      Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
      bottom_diff[i *image_dim *dim+ k * dim + j] = scale * infogain_mat[label * dim + j] / prob;
    }
  }
}

这有点天真。我似乎没有找到任何优化选项。您还需要在 reshape 中更改一些设置代码。

2.在 this PR建议对于 H 中的对角线条目输入 min_count/|i|,其中 |i| 是具有 标签 i 的样本数。其他均为 0。另请参阅 this 。至于加载权重矩阵 H 对于所有输入都是固定的。您可以将其作为 lmdb 文件或其他方式加载。

3.是的,您需要重建。

更新: 如Shai指出infogain pull因为这已于本周获得批准。所以当前版本的caffe支持pixelwise infogain loss。

关于deep-learning - 解决Caffe中不平衡的类成员: weight contribution of each instance to loss value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526123/

相关文章:

caffe - Caffe 上的多维标签数据

python - Keras:test_on_batch 和 predict_on_batch 之间的区别

用于导入 C++ 库的 PYTHONPATH 对应项

machine-learning - 训练 Faster R-CNN 时如何固定共享卷积层

c++ - Caffe SigmoidCrossEntropyLoss层多标签分类c++

ubuntu - Caffe 安装 - 无法开始编译

ssh - 如何使用 X11 转发运行 py-faster-rcnn

machine-learning - *从头开始重新启动数据预取*在caffe中是什么意思

python - tf.data.dataset.shuffle 的机制是什么?

deep-learning - 如何在pytorch中连接嵌入层