我训练了一个基于深度神经网络的多标签数据集(大约20000个样本)。我将softmax替换为sigmoid,并尝试使用Adam优化器来最小化:
tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_, logits=y_pred)
我得到了这样一种预测结果(比较“稳定”):
Prediction for Im1 : [ 0.59275776 0.08751075 0.37567005 0.1636796 0.42361438 0.08701646 0.38991812 0.54468459 0.34593087 0.82790571]
Prediction for Im2 : [ 0.52609032 0.07885984 0.45780018 0.04995904 0.32828355 0.07349177 0.35400775 0.36479294 0.30002621 0.84438241]
Prediction for Im3 : [ 0.58714485 0.03258472 0.3349618 0.03199361 0.54665488 0.02271551 0.43719986 0.54638696 0.20344526 0.88144571]
起初,我认为我只需要为每个类找到一个阈值。 但是我注意到,在我的20000个样本中,第一类出现了约10800次,比例为0.54,这是我的预测值每次都围绕的值。因此,我认为我需要找到一种方法来解决这个“不平衡数据集”的问题。 我考虑过减少我的数据集(欠采样)以使每个类别出现的次数大致相同,但有一个类别只有26个样本...这会让我失去很多样本... 我读到过关于过采样或进一步惩罚稀有类别的方法,但没有真正理解它们是如何工作的。 有人可以分享一些关于这些方法的解释吗? 在Tensorflow上实践时,是否有帮助执行这些方法的函数? 还有其他建议吗? 谢谢:) PS:神经网络用于不平衡的多分类多标签分类 这篇文章提出了同样的问题,但没有答案!