我正在尝试训练数据不平衡的网络。我有A(198个样本),B(436个样本),C(710个样本),D(272个样本),并且我已经阅读了有关“weighted_cross_entropy_with_logits”的信息,但是我发现的所有示例都是针对二进制分类的,因此我不太了解对如何设置这些权重充满信心。
样本总数:1616
A_weight:198/1616 = 0.12?
如果我理解的话,其背后的想法是惩罚市长阶层的错误并更积极地重视少数族裔的打击,对吗?
我的一段代码:
weights = tf.constant([0.12, 0.26, 0.43, 0.17])
cost = tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(logits=pred, targets=y, pos_weight=weights))
提前致谢。
请注意,这weighted_cross_entropy_with_logits
是的加权变体sigmoid_cross_entropy_with_logits
。S形交叉熵通常用于
二进制 分类。是的,它可以处理多个标签,但是S型交叉熵基本上是对每个标签做出(二进制)决定的-例如,对于人脸识别网,那些(但不是互斥的)标签可能是“
对象戴眼镜吗? ,“ 对象是女性吗? ”等。
在二进制分类中,每个输出通道都对应一个二进制(软)判决。因此,需要在损失的计算中进行加权。weighted_cross_entropy_with_logits
通过对交叉熵的一项进行加权,可以做到这一点。
在互斥的多标签分类中,我们使用softmax_cross_entropy_with_logits
,其表现方式有所不同:每个输出通道都对应于一个候选类别的分数。该决定是
后 ,通过比较每个信道的相应输出。
因此,在做出最终决定之前进行加权很简单,通常是通过与权重相乘来在比较分数之前对其进行修改。例如,对于三元分类任务,
# your class weights
class_weights = tf.constant([[1.0, 2.0, 3.0]])
# deduce weights for batch samples based on their true label
weights = tf.reduce_sum(class_weights * onehot_labels, axis=1)
# compute your (unweighted) softmax cross entropy loss
unweighted_losses = tf.nn.softmax_cross_entropy_with_logits(onehot_labels, logits)
# apply the weights, relying on broadcasting of the multiplication
weighted_losses = unweighted_losses * weights
# reduce the result to get your final loss
loss = tf.reduce_mean(weighted_losses)
您也可以依靠它tf.losses.softmax_cross_entropy
来完成最后三个步骤。
在您的情况下,如果您需要解决数据不平衡的问题,那么班级权数的确可能与火车数据中它们的频率成反比。规范化它们,使它们加起来等于一个或多个类,这也是有意义的。
请注意,在上文中,我们根据样本的真实标签对损失进行了处罚。我们还可以通过简单地定义基于 估计 标签的损失
weights = class_weights
由于广播魔术,其余代码无需更改。
在一般情况下,您可能希望权重取决于所犯错误的类型。换句话说,对于每对标签X
和Y
,X
当真实标签为时,您可以选择如何惩罚选择标签Y
。您最终得到一个完整的先验权重矩阵,这将导致weights
以上结果为完整(num_samples, num_classes)
张量。这超出了您想要的范围,但是了解上面代码中仅需要更改权重张量的定义可能会很有用。
相信维基百科文章:http://en.wikipedia.org/wiki/AVL_tree AVL树高度平衡,但一般不平衡重量,也不平衡μ;[4] 也就是说,同级节点的子节点数量可能相差很大。 但是,作为AVL树是: 自平衡二叉查找树[...]。在AVL树中,任何节点的两个子树的高度最多相差一个 我不明白AVL怎么会是重量不平衡的,因为——如果我很好地理解AVL树的定义——每个兄弟姐妹都会有大约
NowCoder 题目描述 平衡二叉树左右子树高度差不超过 1。 解题思路 // java private boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { height(root); return isBalanced; } private int height(Tre
排序二叉树中存在一个问题就是可能会退化成一个链表,当只有左子树或者右子树有节点的时候,此时排序二叉树就像链表一样,但因为排序二叉树在插入查询的时候还要判断左右子树的问题,这样查询的效率反而变低,从而引出了平衡二叉树 平衡二叉树又称平衡搜索树(Self-balance Binary Search Tree)又称AVL树,同时保证了查询和添加的效率。首先平衡二叉树是一颗排序二叉树,且它是空树或者他的每
本文向大家介绍数据不平衡怎么办?相关面试题,主要包含被问及数据不平衡怎么办?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 使用正确的评估标准,当数据不平衡时可以采用精度,调用度,F1得分,MCC,AUC等评估指标。 重新采样数据集,如欠采样和过采样。欠采样通过减少冗余类的大小来平衡数据集。当数据量不足时采用过采样,尝试通过增加稀有样本的数量来平衡数据集,通过使用重复,自举,SMOTE等方
主要内容:二叉排序树转化为平衡二叉树,构建平衡二叉树的代码实现,总结上一节介绍如何使用二叉排序树实现动态 查找表,本节介绍另外一种实现方式—— 平衡二叉树。 平衡二叉树,又称为 AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是在二叉树的基础上,若树中每棵子树都满足其左子树和右子树的深度差都不超过 1,则这棵二叉树就是平衡二叉树。 图 1 平衡与不平衡的二叉树及结点的
我试图理解二叉树的属性。但有一件事我不确定: 二叉树的dev.表示: > 如果任意两片树叶的深度差最大为1,则二叉树是平衡的。 我问我这两个定义是否相等,我的意思是定义。1统计Def。2和viceversa?...对我来说似乎是的...但是谁能用例子准确地解释我这个属性的(非)等价? 谢谢,帕特里克