【发布时间】:2017-12-17 19:45:00
【问题描述】:
我正在尝试训练一个网络来进行类不平衡的语义分割。为了解决这个问题,我尝试实现 InfoGainLoss 层并指定 infogain_matrix,如 here 发布的那样,我在其中对每个对角元素使用 1-频率(类)。
然而,在训练net 时,即使 base_lr 较低,准确率和损失也会立即收敛到 0,并且网络将所有内容标记为 0 类(“未知”)。我现在的问题是 infogain_matrix 是否应该在我链接的帖子中指定,如果是这样,网络这种异常行为可能还有其他原因(我预计损失 0 准确度 1 或损失 INF 准确度 0)。
编辑:
因此,当我使用 SoftMaxWithLoss 层而不是 InfoGainLoss 运行网络时,它立即开始将所有内容分类为最具代表性的类(90% 的类 1),并且不再改变。我现在的猜测是我错误地为 infogain_matrix 配置了 lmdb。有人知道是否必须为 caffe 数据层指定 lmdb 的 dtype(图像和 infogain_matrix 存储为 float32),尽管caffe documentation for the layer 没有这么说?或者,caffe 数据层期望从 lmdb 获得什么 dtype?
lmdbs 是使用从here 获取/修改的代码生成的,但对于图像,均值减法是优先执行的。我在 python 中测试了 lmdb 读数,在这里我必须指定 dtype,否则重新整形为原始矩阵尺寸会引发错误。
编辑2:
所以错误确实在 lmdb 定义中,至于 dtype=float,需要将数据附加到 datum.float_data 而不是 datum.data,请参阅here。现在一切看起来都还不错,而且准确度和损失都不是储物柜古怪的:)
【问题讨论】:
标签: neural-network computer-vision deep-learning caffe pycaffe